嗨那里:)我只是想询问如何在vb .net 2005中创建一个按钮数组。在vb6中你似乎有很大的不同,你只需要在它的属性上添加一个索引但是在vb中。 net没有索引属性。可以通过在表单上设计就像在vb6中复制和粘贴表单一样来制作吗?
答案 0 :(得分:3)
默认情况下,VB.NET不使用控件数组。这是因为事件的处理方式与VB6不同。
如果我没记错的话,这就是你为控制数组编写代码的方式,例如CommandButton
的数组。
Private Sub Buttons_Click(index As Integer)
Select Case index
Case 1
'write some code here'
End Select
End Sub
然后,VB6编译器将解析文件中每个子的名称,并将它们分配给相应的控件事件。因此,上面的子例程会将自身附加到窗体上名为按钮的每个按钮上,您可以通过检查索引参数来确定单击的按钮。
在VB.NET中,事件以不同方式“附加”到控件上
它可以使用AddHandler
语句手动完成,也可以使用Handles
关键字自动完成。
当您从表单设计器向控件分配事件时,IDE使用Handles
关键字将每个控件连接到其事件处理程序。因此,你最终得到了这样的东西:
Private Sub Button_Click(sender As Object, e As System.EventArgs) Handles Button.Click
'your code goes here'
End Sub
使用此方法,您不需要控制数组,如VB6中所示。您可以简单地连接更多按钮点击,或者就此而言,任何控件的点击都会添加到语句的末尾,如下所示:
Private Sub Button_Click(sender As Object, e As System.EventArgs) Handles _
Button1.Click, Button2.Click, Button3.Click, ListBox.Click
'your code goes here'
End Sub
可以看出,您只需添加控件的名称(例如 Button2 ),然后使用.Click
跟随它,以便将控件的click事件“挂钩”到子例程
然后出现问题,如何找到点击了哪个控件(按钮)?
答案很简单,测试sender
参数。
在.NET中,通常会在sender
参数中找到引发事件的控件。因此,基于上面的代码,我们会有类似的东西:
Private Sub Button_Click(sender As Object, e As System.EventArgs) Handles _
Button1.Click, Button2.Click, Button3.Click, ListBox.Click
If sender Is Button1 Then
'do something'
ElseIf sender Is Button2 Then
'do another thing'
ElseIf sender Is Button3 Then
'do yet another thing'
Else
'do something different for the ListBox'
End If
End Sub
如果您已经遵循了这一点并且理解了它,那么您将开始意识到为什么我们不在VB.NET中使用控制数组,或者更常见的是.NET。
如果您还有其他问题,请通知我。干杯!
答案 1 :(得分:1)
与VB6不同,.NET允许您创建正常的控件数组,因此不需要VB6的控件集合。
只需使用数组或List(Of Control)
,用控件和presto填充它!就完成了。
如果要向这些控件添加事件处理程序,请使用AddHandler
。
Windows窗体设计器不再支持控件数组(与VB6'表单设计器不同) - 这是有道理的:如果你有一个控件数组,这本身就是动态的,所以不能在设计时有意义地创造。它的大小在运行时会动态增长和缩小,具体取决于所需的实际控件数量。