原理分析VB.NET開發控件
經過長時間學習VB.NET開發控件,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西。Microsoft®VB®的組件支持歷來都是它的一大賣點,于是第三方軟件開發商們紛紛開發出各種具有新功能性的可視控件(也有少數非可視控件)供VB程序員選用。這種特殊的VB開發形式創造了無數的第三方控件——有的是共享軟件/自由軟件,有的則被放到柜臺上銷售。現在,人們甚至可以直接用VB.NET開發控件,自己的可視/非可視組件了。于是,組件的數量迅速增長,其中相當一部分都是程序員(或者開發小組)為針對自己的開發任務設計的。
注意你或你的開發小組過去購買的MicrosoftActiveX控件往往無須修改或重寫就能直接移植到微軟.NET環境下。具體而言,只要進入MicrosoftVisualStudio®.NET的IDE(集成開發環境)環境,依次從菜單中選擇:工具Tool->自定義工具箱CustomizeToolbox),或者使用.NET框架實用程序Aximp.exe(ActiveX控件導入程序),就能讓.NET應用程序中調用現成的ActiveX控件了。可是,一旦某個控件在.NET環境下工作不正常,它的作者恐怕就應該考慮升級該控件了。所以,為了能在.NET環境中正常使用購來的第三方ActiveX控件,就應該到開發商的Web網站去看看它有沒有出升級版或者.NET版。在.NET編程世界里,人們對自定義UI組件的需求依然存在,只不過它們的創建過程有所不同。
為什么要VB.NET開發控件?
為了限制Windows窗體TextBox控件的文本類型,可以在窗體代碼中添加該控件的KeyPress事件處理程序,以攔截用戶的每次擊鍵并檢查該鍵對應的字符能否進入TextBox:
- Private Sub TextBox1_KeyPress(ByVal sender As Object, _ ByVal e
As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress- If Not Char.IsDigit(e.KeyChar) Then
- e.Handled = True
- Else
- e.Handled = False
- End If
- End Sub
注意單純依靠捕捉擊鍵事件是無法確保輸入TextBox的文本全是數字的,因為用戶有時不是直接向TextBox中敲入字符,而是通過剪貼板粘貼字符給TextBox;何況TextBox文本的初值就有可能包含非法的字符。某些其它事件比如TextChanged等,或許能夠捕捉到更多非法輸入,但我更喜歡用Validating或者Leave事件,它們是在用戶離開輸入控件之后才對TextBox進行字符合法性檢查。這么做誠然放棄了對用戶輸入的即時反應,卻允許用戶首先通過剪貼板輸入“輕度犯規”的文本字符串,比如在禁止空格的輸入框中粘貼“3425234323422342”,然后手工糾正輸入框里的“犯規”字符。
向控件中手工添加事件處理程序代碼并不太難,可是當你面臨更復雜的編程任務,比如檢驗郵寄地址或者汽車的VIN#(車輛識別號碼)的字符合法性時,你還會感到如此輕松嗎?此時你會希望把同一段事件處理程序用于多個窗體甚至多個項目,或者將它提供給開發小組的其他成員共享。然而,提取窗體中的代碼片段,連同安裝指南和控件的命名規則一起發布,卻是一個惡夢的開端。好在天無絕人之路,你只要把它連同一個自定義控件發布,就不會遭遇這種惡夢了,因為此時用戶界面和相關代碼都位于獨立的組件中,而組件的發布相對要容易得多。通過組件發布的代碼片段在升級上也方便些:你只需發布新版的組件即可,再也不必通過種種渠道公布新的代碼片段讓程序員手工覆蓋原先的代碼了!
【編輯推薦】