使用VS C#無(wú)論是WinForm開(kāi)發(fā),還是WebForm 開(kāi)發(fā)都會(huì)遇到一個(gè)問(wèn)題:在Form布局時(shí),會(huì)重復(fù)使用相同的一組控件。如下圖中的控件
這一組控件是非常常用的,但是如果每一次布局相似的窗體時(shí),都對(duì)這些控件進(jìn)行屬性設(shè)置會(huì)是一件非常沒(méi)有技術(shù)含量的工作。通常這時(shí)就需要用到用戶控件了。
在當(dāng)前的項(xiàng)目上添加新建項(xiàng),在彈出的對(duì)話框中選擇“用戶控件”:
在下面的名稱設(shè)置一下用戶控件的名稱。這里我就命名為:DataArea。在生成的用戶控件設(shè)計(jì)窗體,布局控件:
這些都比較簡(jiǎn)單,但關(guān)鍵是問(wèn)題是,生成的用戶控件默認(rèn)是不會(huì)暴露子控件的屬性。比如:你無(wú)法直接使用用戶控件的實(shí)例來(lái)設(shè)置子控件DatePicker的value屬性來(lái)設(shè)置日期值。這里有二種做法:
一、使用userControl.Controls["用戶控件中的子控件名"],來(lái)調(diào)用子控件,再設(shè)置子控件的相關(guān)屬性。但是這有一個(gè)問(wèn)題,就是你需要記住每個(gè)控件的Name屬性,而且調(diào)用的時(shí)候需要先把查找到的子控件強(qiáng)制轉(zhuǎn)換向下轉(zhuǎn)型到正確的控件類型,然后再進(jìn)行設(shè)置。這顯示是比較麻煩的,所以不推薦使用;
二、在設(shè)計(jì)用戶控件時(shí),就暴露子控件的一些屬性,把這些屬性設(shè)計(jì)為用戶控件的公用屬性。這樣,直接調(diào)用用戶控件的這些設(shè)置好的屬性就可以設(shè)置或者取得子控件的屬性了,同時(shí)這樣的設(shè)計(jì)還有良好的封裝性。代碼如下:
三個(gè)暴露出來(lái)的屬性分別是開(kāi)始日期,結(jié)束日期,和查詢按鈕。Form的調(diào)用代碼如下:
這樣的代碼,既簡(jiǎn)單又容易解理,調(diào)用者不必了解用戶控件的具體設(shè)計(jì)細(xì)節(jié),只需要了解控件所暴露出來(lái)的屬性即可方便使用全部子控件。
其實(shí)你可以把用戶控件當(dāng)作窗體來(lái)設(shè)計(jì)和進(jìn)行編碼,只不過(guò)是這個(gè)特殊的窗體需以其他的窗體作為載體。當(dāng)然,你也可以在用戶控件中加入一些具體處理的事件處理和變量計(jì)算等等。
聯(lián)系客服