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控件数组的一些心得,拙见,见笑。
【编辑推荐】