[C#.NET][VB.NET][Winform][User Control] 自訂控制項的自訂集合屬性 /User Control of Custom Collection Properties

[C#.NET][VB.NET][Winform][User Control] 自訂控制項的自訂集合屬性 /User Control of Custom Collection Properties

上篇已介紹過字串集合屬性[C#.NET][VB.NET] 自訂控制項的集合屬性 /User Control of Collection Properties

但集合裡只有一個欄位是無法滿足我們的,接下來將介紹如何使用自訂集合

首先建立一個新的使用者控制項後加入一個類別

C#

2010-7-1 下午 03-40-04

VB

2010-7-1 下午 04-30-11

接著建立集合屬性\

C#

2010-7-1 下午 03-41-58

VB

2010-7-1 下午 04-31-24

 

 

接著按下F5就可以觀察自己剛剛寫的集合屬性了

2010-7-1 下午 03-44-26

接著我們在方案裡加入一個Winform專案,並把剛剛的自訂控制項加入Fomr理;這裡我們我們一樣是要觀察集合屬性,來看看VS幫我們生出什麼Code

C#

2010-7-1 下午 04-36-23

VB

2010-7-1 下午 04-33-39

 

真的很棒!!!該有的東西都生出來了。

另外還有一點要特別注意,用自動屬性的寫法處理集合屬性,不知道為什麼用自動屬性VS不鳥我。寫法如下:

2010-7-1 下午 04-01-53

 

接著在回到WInform專案,跟前面一樣的步驟加入欄位,我發現加完之後VS不會幫我加Code,所以下次再打開的時候資料還是空的。

2010-7-1 下午 04-06-14

不禁想起Bill叔跟我說過,他曾吃過自動屬性的虧,要我盡量別用,當時我心想「應該不會吧!好歹這也是MS的東西阿」,非要自己遇到才知道真的有這麼一回事,不知道有哪位可以跟我講為什麼使用自動屬性會這樣?是我哪裡用錯了嗎?

範例下載

CS_UserControl_Custom_Collection.zip

VB_UserControl_Custom_Collection.zip

2011/12/26

補充:

不能使用自動屬性的原因:

1.因為由VS自動產生的程式碼裡,List<Customer>未被初始化,所以使用自動屬性時,可以在建構式裡初始化


public UserControl1()
{
     InitializeComponent();
     CustomCollection = new List();
}

2.若不想由VS自動產生程式碼,也可以在屬性上定義Attribute

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo