2010-02-01 99 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