#vb.net #function #events
#vb.net #функция #Мероприятия
Вопрос:
Я работаю над функцией в VB.Сеть, в которой пользователь может выбрать поставщика из списка.
Идея заключается в том, что пользователь будет фильтровать список до тех пор, пока нужный поставщик не будет виден в datagridview
затем пользователь может либо дважды щелкнуть заголовок строки, содержимое ячейки, либо выбрать поставщика, а затем нажать кнопку OK
Однако мне интересно, как мне избежать создания одного подраздела для каждого из трех вышеупомянутых событий, могу ли я создать один подраздел, который улавливает все три события?
Private Sub supplierSearchOkButton_Click(sender As Object, e As EventArgs) Handles supplierSearchOkButton.Click
initiativeForm.supplierConcatTextBox.Text = supplierSearchDataGridView.SelectedRows(0).Cells(3).Value.ToString()
Me.Close()
End Sub
Private Sub supplierSearchDataGridView_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles supplierSearchDataGridView.CellContentDoubleClick
initiativeForm.supplierConcatTextBox.Text = supplierSearchDataGridView.SelectedRows(0).Cells(3).Value.ToString()
Me.Close()
End Sub
Private Sub supplierSearchDataGridView_RowHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles supplierSearchDataGridView.RowHeaderMouseDoubleClick
initiativeForm.supplierConcatTextBox.Text = supplierSearchDataGridView.SelectedRows(0).Cells(3).Value.ToString()
Me.Close()
End Sub
Комментарии:
1. Это все разные типы событий, поэтому вы не можете избежать наличия для них отдельных обработчиков. Но ничто не мешает вам создать еще один Sub и заставить их всех вызывать тот же Sub, если вы хотите, чтобы они в основном делали то же самое.
Ответ №1:
Лично я бы выбрал опцию дополнительного метода, упомянутую в комментариях, но, если вы хотите, вы должны быть в состоянии это сделать:
Private Sub SetSupplier(sender As Object, e As EventArgs) Handles supplierSearchOkButton.Click,
supplierSearchDataGridView.CellContentDoubleClick,
supplierSearchDataGridView.RowHeaderMouseDoubleClick
initiativeForm.supplierConcatTextBox.Text = supplierSearchDataGridView.SelectedRows(0).Cells(3).Value.ToString()
Me.Close()
End Sub
или даже это:
Private Sub SetSupplier() Handles supplierSearchOkButton.Click,
supplierSearchDataGridView.CellContentDoubleClick,
supplierSearchDataGridView.RowHeaderMouseDoubleClick
initiativeForm.supplierConcatTextBox.Text = supplierSearchDataGridView.SelectedRows(0).Cells(3).Value.ToString()
Me.Close()
End Sub
Если вы не используете какие-либо свойства других e
параметров, вы можете использовать наиболее общие EventArgs
для всех трех событий, а если вы вообще не используете параметры, вы можете вообще отказаться от них. Я не тестировал это специально, но я уверен, что оба будут работать.
Комментарии:
1. Это именно то, что я собирался предложить, уже сделав это, этот способ работает без проблем.
2. Например, обработчик события Control.Click передает
EventArgs
объект. Но на самом деле этоMouseEventArgs
объект, поэтому вы можете использовать его и использовать как таковой.3. @Jimi, я не знал об этом. Я подозреваю, что это не было изначально (
MouseEventArgs
само по себе не было добавлено до . NET 1.1) но, когда они добавилиMouseClick
событие в .NET 2.0, они решили использовать один и тот жеMouseEventArgs
объект для обоих событий.4. Именно это. В справочном источнике .Net также есть комментарий по этому поводу . Это также относится к DoubleClick.
5. @Jimi, это странно. Я проверил этот источник, и они фактически создают новый
MouseEventArgs
объект для каждого события. Я мог бы понять, если бы они использовали один и тот же объект, но я не могу понять, почему они создали бы более сложный объект дляClick
события, когда он даже не должен был использоваться.