在PropertyGrid中多行字符串(Multi-line string in a Propert

2019-07-01 16:01发布

是否有一个多行字符串的内置编辑器PropertyGrid

Answer 1:

我发现, System.Design.dllSystem.ComponentModel.Design.MultilineStringEditor可以使用如下:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}


Answer 2:

不,你需要创建什么叫做模式UI类型编辑器。 你需要创建一个自UITypeEditor继承的类。 这基本上是当你在省略号按钮点击你正在编辑属性的右侧是被所示的形式。

我发现的唯一的缺点是,我需要具有特定属性的装饰特定字符串属性。 因为我不得不这样做,它已经有一段时间。 我从一本书克里斯塞尔斯称此信息“Windows窗体程序设计在C#”

有所谓的商业PropertyGrid的智能PropertyGrid.NET通过VisualHint。



Answer 3:

是。 我不太记得它是如何被调用,不过看在项目的属性编辑器类似组合框

编辑:作为@fryguybob的,ComboBox.Items使用System.Windows.Forms.Design.ListControlStringCollectionEditor



Answer 4:

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

下面是实现客户的文本编辑器类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;
    }
}

写下您的自定义属性网格,这个编辑器属性适用于财产

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();


文章来源: Multi-line string in a PropertyGrid