В VB.Net я пишу программу, но я не знаю, как передать обработчик события Click в качестве параметра другому подпрограмме и как его вызвать оттуда. Могу ли я сделать это? Если да, то как?
Например: у меня есть следующий код. На двух формах у меня есть 1 ListView и 1 кнопка. Если я нажимаю кнопку, она вызывает событие нажатия кнопки. Кроме того, если я нажимаю CTRL + P в ListView, он вызывает то же событие. Я делаю это на обеих формах.
В форме 1:
Private Sub MyPrintButton1_Click(sender As Object, e As EventArgs) Handles MyPrintButton1.Click
' Print MyListView1 data...
End Sub
Private Sub MyListView1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyListView1.KeyUp
' CTRL+P = Print
If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.P Then
e.Handled = True
MyPrintButton1_Click(sender, e)
End If
End Sub
В форме 2:
Private Sub MyPrintButton2_Click(sender As Object, e As EventArgs) Handles MyPrintButton2.Click
' Print MyListView2 data...
End Sub
Private Sub MyListView2_KeyUp(sender As Object, e As KeyEventArgs) Handles MyListView2.KeyUp
' CTRL+P = Print
If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.P Then
e.Handled = True
MyPrintButton2_Click(sender, e)
End If
End Sub
Я хочу создать только одну подпрограмму в другом (общем) файле и хочу вызвать ее, передав переменные sender & e и обработчик событий двух событий Click.
В этом случае два события KeyUp будут одинаковыми, будет отличаться только имя переданного события:
В форме 1:
Private Sub MyListView1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyListView1.KeyUp
' Handle
AllListViews_KeyUp(sender, e, AddressOf MyPrintButton1_Click)
End Sub
В форме 2:
Private Sub MyListView2_KeyUp(sender As Object, e As KeyEventArgs) Handles MyListView2.KeyUp
' Handle
AllListViews_KeyUp(sender, e, AddressOf MyPrintButton2_Click)
End Sub
И общая подпрограмма будет похожа на это:
Public Sub AllListViews_KeyUp(sender As Object, e As KeyEventArgs, PassedPrintButton_Click As ???? Of(????))
' CTRL+P = Print
If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.P Then
e.Handled = True
PassedPrintButton_Click(sender2, e2 ????)
End If
End Sub
Итак: Как мне передать события в качестве параметра и как вызвать событие? Когда я вызываю событие PassedPrintButton_Click, как я могу передать свой собственный отправитель и параметры e (sender2, e2)? И как и где я могу их объявить?)
И когда я передаю адрес MyPrintButton1_Click и addressMyPrintButton2_Click, откуда подпрограмма узнает отправителя и параметры e события щелчка?
Спасибо заранее.