2010-02-01 106 views
1

我想在Visual Studio的设计器中使用属性网格。C#属性的类列表

我有一个类,我希望开发人员能够在设计时添加到类的列表,以便用户可以访问额外的功能。

下面是我已经在代码中的一些示例代码。问题是当开发人员进入设计模式时,他只能看到列表中有多少个值,但无法看到任何细节。当试图向列表中添加新项目时,用户会遇到错误。

找不到类型'EditorTextBox + SyntaxRegex'的构造函数。

现在代码:

private List<SyntaxRegex> _syntaxRegexList = new List<SyntaxRegex>(); 
public class SyntaxRegex 
{ 
    public string title; 
    public string regex; 
    public Color color; 
} 
Public List<SyntaxRegex> SyntaxRegexList 
{ 
    get{_syntaxRegexList = value;} 
    set{return _regexList;} 
} 

回答

3

您需要添加类型转换器/编辑器;一个良好的开端是添加:

[TypeConverter(typeof(ExpandableObjectConverter))] 

上述各class定义。例如,下面的工作正常(注意我改的属性,删除列表中的setter等):

[TypeConverter(typeof(ExpandableObjectConverter))] 
class Foo { 
    private List<SyntaxRegex> _syntaxRegexList = new List<SyntaxRegex>(); 
    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public class SyntaxRegex 
    { 
     public override string ToString() { 
      return string.IsNullOrEmpty(Title) ? "(no title)" : Title; 
     } 
     public string Title { get; set; } 
     public string Regex { get; set; } 
     public Color Color { get; set; } 
    } 
    [DisplayName("Patterns")] 
    public List<SyntaxRegex> SyntaxRegexList 
    { 
     get { return _syntaxRegexList; } 
    } 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form 
     { 
      Controls = 
      { 
       new PropertyGrid { 
        Dock = DockStyle.Fill, 
        SelectedObject = new Foo() 
       } 
      } 
     }); 
    } 
} 

特定错误消息也让我不知道你实际类型为市民提供一个公共的无参数的构造函数(它不编译的事实使我怀疑你没有发布实际的代码...)

+0

我缩短了空间的代码。添加类型转换器工作。 – 2010-02-01 20:38:47

+0

@Joshua - 缩短空间是好的,但缩短版本应该仍然编译器(*),并演示问题。 * =除非您询问阻止compilaton的语法问题。 – 2010-02-01 20:43:56