2016-09-28 6 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

Добавьте все формы в «Список (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

Работает как шарм !! Большое спасибо, Кейт .. – Prashant

-1

Приложить все обработчики в свой метод, а затем филиальную поведение на основе Select Case:

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 –

 Смежные вопросы

  • Нет связанных вопросов^_^