布局方面,建議你用FlowLayoutPanel,不用手工控制控件位置了。假設(shè)有一個FlowLayoutPanel1。
成都創(chuàng)新互聯(lián)公司于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元襄城做網(wǎng)站,已為上家服務(wù),為襄城各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
先在窗體類中建一個控件的集合:
Dim
TextBoxes
As
New
List(Of
TextBox)
在button1的
Click事件
中寫:
For
i
=
1
To
5
'5是每次加入的數(shù)量
Dim
newTextBox
As
New
TextBox()
'newTextBox.Size
=
New
Size(100,20)
'
TextBoxes.Add(newTextBox)
'加入我們的集合中
FlowLayoutPanel1.Controls.Add(newTextBox)
'加到窗體的FlowLayoutPanel中去
Next
i
然后button2的Click事件中:
For
Each
itemTextBox
As
TextBox
In
TextBoxes
'這里的itemTextBox.Text就代表每個TextBox里的文本
'如果你需要清空,調(diào)用TextBoxes.Clear()和FlowLayoutPanel.Controls.Clear()即可
Next
一 前言
Microsoftreg; Visual Basicreg; 的組件支持歷來都是它的一大賣點 于是第三方軟件開發(fā)商們紛紛開發(fā)出各種具有新功能性的可視控件 (也有少數(shù)非可視控件) 供 Visual Basic 程序員選用 這種特殊的 Visual Basic 開發(fā)形式創(chuàng)造了無數(shù)的第三方控件——有的是共享軟件/自由軟件 有的則被放到柜臺上銷售 現(xiàn)在 人們甚至可以直接用 Visual Basic 開發(fā)自己的可視/非可視組件了 于是 組件的數(shù)量迅速增長 其中相當一部分都是程序員 (或者開發(fā)小組) 為針對自己的開發(fā)任務(wù)設(shè)計的
注意 你或你的開發(fā)小組過去購買的 Microsoft ActiveX 控件往往無須修改或重寫就能直接移植到微軟 NET 環(huán)境下 具體而言 只要進入 Microsoft Visual Studioreg; NET 的 IDE (集成開發(fā)環(huán)境) 環(huán)境 依次從菜單中選擇 工具 Tool 自定義工具箱 Customize Toolbox) 或者使用 NET 框架實用程序 Aximp exe (ActiveX 控件導(dǎo)入程序) 就能讓 NET 應(yīng)用程序中調(diào)用現(xiàn)成的 ActiveX 控件了 可是 一旦某個控件在 NET 環(huán)境下工作不正常 它的作者恐怕就應(yīng)該考慮升級該控件了 所以 為了能在 NET 環(huán)境中正常使用購來的第三方 ActiveX 控件 就應(yīng)該到開發(fā)商的 Web 網(wǎng)站去看看它有沒有出升級版或者 NET 版 在 NET 編程世界里 人們對自定義 UI 組件的需求依然存在 只不過它們的創(chuàng)建過程有所不同 本文將探討兩個問題 為什么要創(chuàng)建自己的 Microsoft Windowsreg; 控件?在 Visual Basic NET 中開發(fā)控件時有哪些方面不同于以往的 / 版?
二 為什么要開發(fā)你自己的控件? 為了限制 Windows 窗體TextBox 控件的文本類型 可以在窗體代碼中添加該控件的KeyPress 事件處理程序 以攔截用戶的每次擊鍵并檢查該鍵對應(yīng)的字符能否進入 TextBox Private Sub TextBox _KeyPress(ByVal sender As Object _ ByVal e As System Windows Forms KeyPressEventArgs) _ Handles TextBox KeyPress If Not Char IsDigit(e KeyChar) Then e Handled = True Else e Handled = False End If End Sub 注意 單純依靠捕捉擊鍵事件是無法確保輸入 TextBox 的文本全是數(shù)字的 因為用戶有時不是直接向 TextBox 中敲入字符 而是通過剪貼板粘貼字符給 TextBox 何況 TextBox 文本的初值就有可能包含非法的字符 某些其它事件比如 TextChanged 等 或許能夠捕捉到更多非法輸入 但我更喜歡用 Validating 或者 Leave 事件 它們是在用戶離開輸入控件之后才對 TextBox 進行字符合法性檢查 這么做誠然放棄了對用戶輸入的即時反應(yīng) 卻允許用戶首先通過剪貼板輸入 輕度犯規(guī) 的文本字符串 比如在禁止空格的輸入框中粘貼 然后手工糾正輸入框里的 犯規(guī) 字符 向控件中手工添加事件處理程序代碼并不太難 可是當你面臨更復(fù)雜的編程任務(wù) 比如檢驗郵寄地址或者汽車的 VIN # (車輛識別號碼) 的字符合法性時 你還會感到如此輕松嗎?此時你會希望把同一段事件處理程序用于多個窗體甚至多個項目 或者將它提供給開發(fā)小組的其他成員共享 然而 提取窗體中的代碼片段 連同安裝指南和控件的命名規(guī)則一起發(fā)布 卻是一個惡夢的開端 好在天無絕人之路 你只要把它連同一個自定義控件發(fā)布 就不會遭遇這種惡夢了 因為此時用戶界面和相關(guān)代碼都位于獨立的組件中 而組件的發(fā)布相對要容易得多 通過組件發(fā)布的代碼片段在升級上也方便些 你只需發(fā)布新版的組件即可 再也不必通過種種渠道公布新的代碼片段讓程序員手工覆蓋原先的代碼了!
三 繼承性如何改變了控件的開發(fā)? 在 NET 中的控件開發(fā)已經(jīng)和 Visual Basic 大相徑庭 其根本原因 就是 NET 引入了繼承性 在 Visual Basic 中 你只能不用控件或者直接引用現(xiàn)成的控件來實現(xiàn)各種功能性 例如 為了創(chuàng)建前面提到的自定義文本輸入框 你就要新建一個 ActiveX 控件 然后向其中增加一個 TextBox 注意 人們通常把這種編程思路稱為 容器 (containment) 或者 委托 (delegation) 在 Visual Basic 中 用于模擬繼承機制的非控件類也可以采用這種思路 此時 新建的 ActiveX 控件并不會如你所愿自動獲得 TextBox 的某些屬性 (比如 Text 屬性) 這些屬性只能由你編碼實現(xiàn) 更糟的是 你必須用許多代碼來確保 TextBox 始終占據(jù)整個窗體 你還得為新控件設(shè)計 resizing 事件處理程序 當然 經(jīng)過一番折騰 你總會完成該控件的設(shè)計任務(wù)的 何況還有 ActiveX 控件界面向?qū)軠p輕你的負擔 可是在 NET 環(huán)境下 整個任務(wù)的完成思路都會變得完全不同 繼承性能避免控件開發(fā)中的某些重復(fù)代碼 因為它能讓 NET 控件直接獲得任何其它控件的功能性 例如 為了創(chuàng)建自己的 TextBox 控件 你可以繼承現(xiàn)有的 TextBox 控件 而不是 UserControl 控件 新控件繼承了基類控件的全部功能性 因此你只需要對基類控件中沒有的功能性編碼即可 下面舉一個實際的例子 以下代碼能夠創(chuàng)建一個自定義 TextBox 控件 它只允許用戶輸入數(shù)字字符 注意 為了運行這段代碼 你只需在 Windows 應(yīng)用程序 模板下新建一個 Visual Basic NET 項目 然后就能在 IDE 自動生成的空白窗體中試驗新控件了 在項目中新建一個類 NumericTextBox 用下面的代碼替換 NumericTextBox 類文件的內(nèi)容 編譯該項目 最后 在菜單中選擇工具 自定義工具箱 選中先前編譯項目得到的 exe 文件 就能把新控件添加到工具箱了 Public Class NumericTextBox Inherits System Windows Forms TextBox Protected Overrides Sub OnKeyPress(ByVal e As _ System Windows Forms KeyPressEventArgs) If Not Char IsDigit(e KeyChar) Then e Handled = True Else e Handled = False End If End Sub End Class 對本例來說 以上代碼已經(jīng)足夠了 如果你還覺得它不夠完善的話 請改用下列代碼 它運用一種奇妙的布爾邏輯減少了代碼行數(shù) Public Class NumericTextBox Inherits System Windows Forms TextBox Protected Overrides Sub OnKeyPress(ByVal e As _ System Windows Forms KeyPressEventArgs) e Handled = Not Char IsDigit(e KeyChar) End Sub End Class 現(xiàn)在 你的新控件已經(jīng)正確顯示在窗體中了 它象 TextBox 一樣處理事件 并且擁有與 TextBox 一樣的方法 屬性 你甚至不需更多的編碼就能實現(xiàn)對新控件的數(shù)據(jù)綁定 因為這也是基類控件 TextBox 的功能性之一 注意 本控件對用戶輸入的要求十分苛刻 它只允許輸入 至 的數(shù)字 也就是說 數(shù)字中的逗號 小數(shù)點甚至負號都是非法字符 在 Visual Basic 中設(shè)計本控件時 核心代碼會和本范例一樣長 可是用于處理控件的 resizing 事件和實現(xiàn) TextBox 組件屬性的代碼也會有這么長 由此可見 NET 提供的繼承性能夠大大精簡源代碼 單憑這一點 NET 就已經(jīng)令人嘆服了 何況它還有許多其它優(yōu)越性 更奇妙的是 凡是要求使用某一控件的地方 都能改用繼承該控件而來的新控件 例如 在任何例程中要求 TextBox 的地方都能用你的 NumericTextBox 控件 不僅如此 從現(xiàn)有控件 而不是從 UserControl 類繼承而來的新控件 不但具備基類控件的所有功能性 還能象基類控件一樣使用繼承得到的屬性 方法和事件 因此 任何程序員只要學(xué)過標準的 TextBox 控件 就知道如何使用 NumericTextBox 控件 允許繼承現(xiàn)有的類/控件 是從Visual Basic 到 NET 的一個重大飛躍 可是 NET 的優(yōu)點又何止于此!在 NET 環(huán)境下Windows 窗體控件不但擁有不少強大的功能 而且它們的創(chuàng)建也比在老版本 Visual Basic 中容易得多
lishixinzhi/Article/program/net/201311/14940
如控件自身無法設(shè)置滾動條,那就在父容器控件中(如FORM)使用滾動條解決問題。另外,也可將日期控件放在彈出窗口中,
Dim tb1 As Label =Form1.Controls("lbl" (i + 1))
tb1.Text = "123"
dim lv1 as listview =form1.controls("listview1")
lv1.Gridlins=true
Public Class ControlValue
Inherits Control
''' summary
''' 獲取或設(shè)置控件的值。
''' /summary
System.ComponentModel.Browsable(True)
System.ComponentModel.Category("布局")
System.ComponentModel.Description("獲取或設(shè)置控件的值。")
Public Property Value As String
End Class
名稱欄目:vb.net做控件屬性 VB窗體屬性
當前路徑:http://m.newbst.com/article44/hjjpee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、動態(tài)網(wǎng)站、小程序開發(fā)、品牌網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)