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