33

是否有内置编辑器用于PropertyGrid.

4

4 回答 4

55

我发现System.Design.dllhas System.ComponentModel.Design.MultilineStringEditorwhich 可以按如下方式使用:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}
于 2008-09-24T21:46:15.250 回答
2

不,您需要创建所谓的模态 UI 类型编辑器。您需要创建一个继承自 UITypeEditor 的类。这基本上是当您单击正在编辑的属性右侧的省略号按钮时显示的表单。

我发现的唯一缺点是我需要用特定的属性来装饰特定的字符串属性。我不得不这样做已经有一段时间了。我从 Chris Sells 的一本名为“C# 中的 Windows 窗体编程”的书中获得了这些信息

VisualHint有一个名为Smart PropertyGrid.NET的商业属性网格。

于 2008-09-24T21:26:17.857 回答
2

我们需要编写自定义编辑器来获得属性网格中的多行支持。

这是从UITypeEditor实现的客户文本编辑器类

public class MultiLineTextEditor : UITypeEditor
{
    private IWindowsFormsEditorService _editorService;

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.DropDown;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        _editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

        TextBox textEditorBox = new TextBox();
        textEditorBox.Multiline = true;
        textEditorBox.ScrollBars = ScrollBars.Vertical;
        textEditorBox.Width = 250;
        textEditorBox.Height = 150;
        textEditorBox.BorderStyle = BorderStyle.None;
        textEditorBox.AcceptsReturn = true;
        textEditorBox.Text = value as string;

        _editorService.DropDownControl(textEditorBox);

        return textEditorBox.Text;
    }
}

编写您的自定义属性网格并将此 Editor 属性应用于属性

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

在主窗体中分配此对象

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
于 2016-03-08T11:48:38.450 回答
0

是的。我不太记得它是如何调用的,但请查看 Items 属性编辑器以获取类似 ComboBox 的内容

已编辑:截至@fryguybob,ComboBox.Items 使用 System.Windows.Forms.Design.ListControlStringCollectionEditor

于 2008-09-24T21:26:38.947 回答