使用VS C#無論是WinForm開發(fā),還是WebForm 開發(fā)都會(huì)遇到一個(gè)問題:在Form布局時(shí),會(huì)重復(fù)使用相同的一組控件。如下圖中的控件 ![]() 這一組控件是非常常用的,但是如果每一次布局相似的窗體時(shí),都對這些控件進(jìn)行屬性設(shè)置會(huì)是一件非常沒有技術(shù)含量的工作。通常這時(shí)就需要用到用戶控件了。 在當(dāng)前的項(xiàng)目上添加新建項(xiàng),在彈出的對話框中選擇“用戶控件”: ![]() 在下面的名稱設(shè)置一下用戶控件的名稱。這里我就命名為:DataArea。在生成的用戶控件設(shè)計(jì)窗體,布局控件: ![]() 這些都比較簡單,但關(guān)鍵是問題是,生成的用戶控件默認(rèn)是不會(huì)暴露子控件的屬性。比如:你無法直接使用用戶控件的實(shí)例來設(shè)置子控件DatePicker的value屬性來設(shè)置日期值。這里有二種做法: 一、使用userControl.Controls["用戶控件中的子控件名"],來調(diào)用子控件,再設(shè)置子控件的相關(guān)屬性。但是這有一個(gè)問題,就是你需要記住每個(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è)暴露出來的屬性分別是開始日期,結(jié)束日期,和查詢按鈕。Form的調(diào)用代碼如下: ![]() 這樣的代碼,既簡單又容易解理,調(diào)用者不必了解用戶控件的具體設(shè)計(jì)細(xì)節(jié),只需要了解控件所暴露出來的屬性即可方便使用全部子控件。 其實(shí)你可以把用戶控件當(dāng)作窗體來設(shè)計(jì)和進(jìn)行編碼,只不過是這個(gè)特殊的窗體需以其他的窗體作為載體。當(dāng)然,你也可以在用戶控件中加入一些具體處理的事件處理和變量計(jì)算等等。 |
|