是否有内置的TypeConverter或UITypeEditor来编辑字符串列表

时间:2010-01-29 15:40:53

标签: .net winforms .net-3.5 windows-forms-designer typeconverter

我想知道.Net-3.5是否带有内置List<string>string[] TypeConverterUITypeEditor,以便我可以编辑此类属性财产网格。

2 个答案:

答案 0 :(得分:2)

您可以使用[Editor(“System.Windows.Forms.Design.StringArrayEditor,System.Design,[此处为[版本和公钥标记信息]”,typeof(System.Drawing.Design.UITypeEditor))]

答案 1 :(得分:2)

List<String>

的UITypeEditor

对于string[],您不需要做任何特殊操作,属性网格将使用包含多行文本框的标准对话框来编辑字符串数组,每行将是数组中的元素。 / p>

要在属性网格中编辑List<string>,您可以使用以下任一选项:

  • StringCollectionEditor显示一个对话框,其中包含用于编辑元素的多行文本框
  • 创建自定义CollectionEditor以编辑集合编辑器对话框中的项目

选项1 - StringCollectionEditor

private List<string> myList = new List<string>();
[Editor("System.Windows.Forms.Design.StringCollectionEditor, " +
    "System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
    typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<string> MyList {
    get {
        return myList;
    }
    set {
        myList = value;
    }
}

enter image description here

选项2 - 自定义CollectionEditor

首先创建自定义编辑器:

//You need to add reference to System.Design
public class MyStringCollectionEditor : CollectionEditor {
    public MyStringCollectionEditor() : base(type: typeof(List<String>)) { }
    protected override object CreateInstance(Type itemType) {
        return string.Empty;
    }
}

然后使用编辑器属性装饰属性:

private List<string> myList = new List<string>();
[Editor(typeof(MyStringCollectionEditor), typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<string> MyList {
    get {
        return myList;
    }
    set {
        myList = value;
    }
}

enter image description here