2012-12-10 42 views
0

當窗體的數據源包含集合時,winform屬性窗格將彈出一個新窗口,我想在彈出窗口時使用自己的窗體。在winform屬性網格控件中替換集合窗口

例如: Class User{ int ID ;int Name; list<order> CustomerOrder;},當彈出訂單頁面時,我希望它可以從添加項目時從其他數據源的存在訂單列表中選擇訂單。

這是真的嗎?或開源擴展控件或第三控件?

回答

1

如果你製作一個包裝你的列表或訂單的新類型,你可以在你的新類型上設置Editor屬性,然後你可以彈出你想要的任何一種winform。

例如,像這樣一類包裝清單:

[Editor(typeof(OrderListEditor), typeof(UITypeEditor))] 
class OrderList 
{ 
    public OrderList() { Orders = new List<order>(); } 
    public List<order> Orders { get; set; } 
} 

,並讓你的用戶類的屬性:

class User 
{ 
... 
    public OrderList CustomerOrder { get; } 
} 

然後,所有你需要做的就是邏輯寫當用戶按下PropertyGrid中的「...」按鈕時執行所需操作:

class OrderListEditor : UITypeEditor 
{ 
    public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     return System.Drawing.Design.UITypeEditorEditStyle.Modal; 
    } 

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     OrderList list = (OrderList)value; 

     Console.WriteLine("There are " + list.Orders.Count + " orders"); 
     return list; 
    } 
} 
相關問題