2016-09-28 95 views
0

我有一个noob查询,有什么方法可以使用单个命令在不同的按钮点击事件上打开不同的窗体。我在一个表格中有24个按钮,并将使用这些按钮打开24种不同的表格。在VB.NET中点击不同的按钮点击不同的窗体

所以不是做24次为:

Private Sub BtnCh1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCh1.Click 
    FormCh1.Show() 
End Sub 
Private Sub BtnCh2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCh2.Click 
    FormCh2.Show() 
End Sub 
Private Sub BtnCh3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCh3.Click 
    FormCh3.Show() 
End Sub 
Private Sub BtnCh4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCh4.Click 
    FormCh4.Show() 
End Sub 

它可以用一个命令来完成?

+0

在“List(Of Form)”中添加所有表单,在每个按钮的Tag属性中添加索引,将所有按钮设置为相同的事件并调用list(CType(sender,Button).Tag) .Show()' –

+0

@ Keith:我如何在'List(Of Form)'中添加表单? – Prashant

+0

我会在答案中加上它以使事情易读 –

回答

1

在窗体的负载事件中添加的形式在List(Of Form)

Private list As List(Of Form) 
Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load 
    list = New List(Of Form) 
    list.Add(New Form1()) 
    ' 
    ' 
    ' 
    list.Add(New Form24()) 
End Sub 

设置你的按钮的Tag属性与表单的索引并将它们全部设置为使用相同的点击事件:

Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.Click 
    list(CType(sender, Button).Tag).Show() 
End Sub 
+0

像一个魅力工程!非常感谢Keith .. – Prashant

-1

附上所有的处理程序,以你的方法,并根据选择情况,那么分支行为:

Private Sub Button_Click_Handler(sender As Object, e As EventArgs) Handles Button66.Click, Button67.Click, Button68.Click 

    Dim btn As Button = DirectCast(sender, Button) 

    Select Case btn.Name 
     Case Button66.Name 
      Dim f1 As New Form1 
      f1.Show() 
     Case Button67.Name 
      Dim f2 As New Form2 
      f2.Show() 
     Case Button68.Name 
      Dim f3 As New Form3 
      f3.Show() 
    End Select 

End Sub 
+0

为什么在比较参考时比较名称? –

+0

没理由。我希望他们都能很好地工作,除非有充分理由不与名称进行比较。 –

+1

由于参考比较比字符串比较更快。尽管我认为你可以通过使用'Case Is ...'进行比较,然而在实际测试之后,我发现这并不起作用。如果可以这样做,则不必输入尽可能多的文本。 - 然而,在对参考字符串和字符串比较进行实际测试之后,我了解到在“Select Case”中比较字符串是一个相当大的瓶颈。请参阅:http://ideone.com/BCMEIR –