自己動手實現VB.NET控件數組
VB.NET經過長時間的發展,很多用戶都很了解VB.NET了,這里我發表一下個人理解,和大家討論討論。由于項目的需求又變了,我必須要在我的窗口上根據讀取的文件不同添加不同的checkbox,我本以為VB.NET和vb一樣一定會有控件數組呢,結果網上的高手們都說沒有VB.NET控件數組這個概念的。不過可以自己寫一個類來實現VB.NET控件數組的功能。他們都有現成的代碼,我拿來用了,很好用。這里我就只簡單說一下我在用這個類的過程中出現的問題。應該比較值得提一下。
- Public Class CheckBoxArrClass CheckBoxArr
- Inherits System.Collections.CollectionBase
- Private ReadOnly ParentGrpBx As System.Windows.Forms.GroupBox
- Public Sub New()Sub New(ByVal pGrpBx As System.Windows.Forms.GroupBox)
- ParentGrpBx = pGrpBx
- End Sub
- Default Public ReadOnly Property Item()Property Item
(ByVal index As Integer) As System.Windows.Forms.CheckBox- Get
- Return Me.List.Item(index)
- End Get
- End Property
- Public Sub AddItem()Sub AddItem()
- Dim CheckBox1 As New System.Windows.Forms.CheckBox
- Me.List.Add(CheckBox1)
- ParentGrpBx.Controls.Add(CheckBox1)''向窗體中增加控件
- CheckBox1.Tag = Me.Count''Count屬性從CollectionBase 繼承
- CheckBox1.Top = Me.Count * 30
- CheckBox1.Left = 200
- CheckBox1.Text = "CheckBox" & Me.Count.ToString
- End Sub
- Public Sub AddItem()Sub AddItem(ByVal CheckBox1 As System.Windows.Forms.CheckBox)
- Me.List.Add(CheckBox1)
- End Sub
- Public Sub RemoveItem()Sub RemoveItem()
- If Me.Count > 0 Then
- ParentGrpBx.Controls.Remove(Me(Me.Count - 1))
- Me.List.RemoveAt(Me.Count - 1)
- End If
- End Sub
- End Class
這里要提的問題很簡單:
1、添加的控件要有個容器,也就是你要向哪個地方添加控件的地方。這里,在我標為紅色的部分設置了添加控件的“父親”,你可以直接添加到你的窗體里,那么就可以將紅色部分改寫為:“ParentForm”和“form”即將那一句改為:Private ReadOnly ParentForm As System.Windows.Forms.Form。在程序里,我是將checkbox添加到一個groupbox里的。所以向哪個容器添加控件就是需要你改的了。
2、控件的布局。記住,控件的位置永遠是相對于他的容器的坐標的。一下給出我添加控件的擺放代碼:三個checkbox占一行。
- Public Sub GenerateDynCheckBox()Sub GenerateDynCheckBox(ByRef langList As ArrayList)
- CheckBox1 = New CheckBoxArr(GroupBoxAttrInfo)
- Dim i As Integer
- For i = 0 To langList.Count - 1 'langList 存放各國語言English,French。。。。
- 'add the checkbox array
- CheckBox1.AddItem()
- CheckBox1(i).Text = langList(i)
- CheckBox1(i).Checked = True
- CheckBox1(i).Height = 28
- 'layout the checkboxes
- If i = 0 Then
- CheckBox1(i).Top = 20
- CheckBox1(i).Left = 10
- ElseIf i = 1 Then 'Or 2 Then
- CheckBox1(i).Top = 20
- CheckBox1(i).Left = CheckBox1(i - 1).Left + CheckBox1(i - 1).Width
- ElseIf i = 2 Then
- CheckBox1(i).Top = 20
- CheckBox1(i).Left = CheckBox1(i - 1).Left + CheckBox1(i - 1).Width
- ElseIf i <> 0 And i <> 1 And i <> 2 Then
- CheckBox1(i).Top = CheckBox1(i - 3).Top + CheckBox1(i - 3).Height + 10
- CheckBox1(i).Left = CheckBox1(i - 3).Left
- End If
- Next i
- End Sub
3、刪除控件。用Checkbox的RemoveItem方法,不要使用RemoveAt方法。RemoveAt方法會導致刪除失敗,會提示NullReferenceException的錯誤,具體為什么我也沒有再進一步研究,如果有高手知道,可以指教一下,小女在這里多謝了。
以上就是我在使用VB.NET控件數組的一些心得,拙見,見笑。
【編輯推薦】