自己動(dòng)手實(shí)現(xiàn)VB.NET控件數(shù)組
VB.NET經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶都很了解VB.NET了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。由于項(xiàng)目的需求又變了,我必須要在我的窗口上根據(jù)讀取的文件不同添加不同的checkbox,我本以為VB.NET和vb一樣一定會(huì)有控件數(shù)組呢,結(jié)果網(wǎng)上的高手們都說(shuō)沒(méi)有VB.NET控件數(shù)組這個(gè)概念的。不過(guò)可以自己寫(xiě)一個(gè)類(lèi)來(lái)實(shí)現(xiàn)VB.NET控件數(shù)組的功能。他們都有現(xiàn)成的代碼,我拿來(lái)用了,很好用。這里我就只簡(jiǎn)單說(shuō)一下我在用這個(gè)類(lèi)的過(guò)程中出現(xiàn)的問(wèn)題。應(yīng)該比較值得提一下。
- 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
這里要提的問(wèn)題很簡(jiǎn)單:
1、添加的控件要有個(gè)容器,也就是你要向哪個(gè)地方添加控件的地方。這里,在我標(biāo)為紅色的部分設(shè)置了添加控件的“父親”,你可以直接添加到你的窗體里,那么就可以將紅色部分改寫(xiě)為:“ParentForm”和“form”即將那一句改為:Private ReadOnly ParentForm As System.Windows.Forms.Form。在程序里,我是將checkbox添加到一個(gè)groupbox里的。所以向哪個(gè)容器添加控件就是需要你改的了。
2、控件的布局。記住,控件的位置永遠(yuǎn)是相對(duì)于他的容器的坐標(biāo)的。一下給出我添加控件的擺放代碼:三個(gè)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 存放各國(guó)語(yǔ)言English,F(xiàn)rench。。。。
- '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方法會(huì)導(dǎo)致刪除失敗,會(huì)提示NullReferenceException的錯(cuò)誤,具體為什么我也沒(méi)有再進(jìn)一步研究,如果有高手知道,可以指教一下,小女在這里多謝了。
以上就是我在使用VB.NET控件數(shù)組的一些心得,拙見(jiàn),見(jiàn)笑。
【編輯推薦】