Как создать редактор PropertyGrid, который ограничивает строку до n символов

Я попытался создать свой собственный UITypeEditor, но метод EditValue никогда не вызывается

public class BoundedTextEditor : UITypeEditor
{

    public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.None;
    }

    public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
    {
        if (value.GetType() != typeof(string)) return value;
        var editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
        if (editorService != null)
        {
            var textBox = new TextBox { Text = value.ToString(), Size = new Size(200, 100), MaxLength = 3 };
            editorService.DropDownControl(textBox);
            return textBox.Text;
        }
        return value;
    }

}

Используется следующим образом:

[Editor(typeof(BoundedTextEditor), typeof(UITypeEditor))]
public string KeyTip
{
    get
    {
        return _keyTip;
    }
    set
    {
        _keyTip = value;
    }
}

Здесь я попытался ограничить строку тремя символами, было бы лучше, если бы это можно было определить через атрибут.


person Sam Mackrill    schedule 10.08.2011    source источник


Ответы (1)


Поскольку вы хотите отобразить TextBox в раскрывающейся области под свойством, измените реализацию GetEditStyle, чтобы она возвращала UITypeEditorEditStyle.DropDown вместо UITypeEditorEditStyle.None.

Это покажет стрелку раскрывающегося списка рядом со свойством, как вы видите в ComboBox, нажатие на стрелку вызовет ваш метод EditValue, чтобы отобразить раскрывающееся текстовое поле для редактирования значения свойства.

person lee-m    schedule 04.09.2011