如何创建一个将字符串限制为n个字符的PropertyGrid编辑器

时间:2011-08-10 16:04:59

标签: c# propertygrid uitypeeditor

我试图创建自己的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;
    }
}

这里我试图将字符串限制为3个字符,如果可以通过属性定义它会更好。

1 个答案:

答案 0 :(得分:4)

由于您要在属性下方的下拉区域中显示TextBox,请将GetEditStyle的实现更改为返回UITypeEditorEditStyle.DropDown而不是UITypeEditorEditStyle.None

这将显示属性旁边的下拉箭头,就像您在ComboBox上看到的那样,单击箭头然后会调用您的EditValue方法以显示一个下拉文本框来编辑属性值。