2008-10-14 45 views
3

我有一個具有List<T>屬性的組件。列表中的類具有用description屬性裝飾的每個屬性,但說明不顯示在Collection Editor中。在IDE設計器中,是否有一種方法可以打開標準Collection Editor中的Description面板? 我需要從CollectionEditor繼承我自己的類型編輯器才能實現此目的嗎?打開標準CollectionEditor中的Description面板

回答

8

基本上,你要麼需要創建自己的編輯器,要麼子類CollectionEditor和混亂的形式。後者更容易 - 但不一定很漂亮...

以下使用常規集合編輯器窗體,但只是掃描它的PropertyGrid控件,啓用HelpVisible

/// <summary> 
/// Allows the description pane of the PropertyGrid to be shown when editing a collection of items within a PropertyGrid. 
/// </summary> 
class DescriptiveCollectionEditor : CollectionEditor 
{ 
    public DescriptiveCollectionEditor(Type type) : base(type) { } 
    protected override CollectionForm CreateCollectionForm() 
    { 
     CollectionForm form = base.CreateCollectionForm(); 
     form.Shown += delegate 
     { 
      ShowDescription(form); 
     }; 
     return form; 
    } 
    static void ShowDescription(Control control) 
    { 
     PropertyGrid grid = control as PropertyGrid; 
     if (grid != null) grid.HelpVisible = true; 
     foreach (Control child in control.Controls) 
     { 
      ShowDescription(child); 
     } 
    } 
} 

在使用中顯示此(注意使用EditorAttribute):

class Foo { 
    public string Name { get; set; } 
    public Foo() { Bars = new List<Bar>(); } 
    [Editor(typeof(DescriptiveCollectionEditor), typeof(UITypeEditor))] 
    public List<Bar> Bars { get; private set; } 
} 
class Bar { 
    [Description("A b c")] 
    public string Abc { get; set; } 
    [Description("D e f")] 
    public string Def{ get; set; } 
} 
static class Program { 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form { 
      Controls = { 
       new PropertyGrid { 
        Dock = DockStyle.Fill, 
        SelectedObject = new Foo() 
       } 
      } 
     }); 
    } 
} 
+0

這個工作現貨 - 感謝 – benPearce 2008-10-14 22:39:09