Как передать обработчик события Click в качестве параметра другому сабвуферу? - PullRequest
0 голосов
/ 23 мая 2019

В 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 события щелчка?

Спасибо заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...