Для приведенного ниже примера создайте новый проект приложения WinForms и добавьте TextBox
, Button
и ContextMenuStrip
. Добавьте три пункта в меню и назовите их «Первый», «Второй» и «Третий». Присвойте ContextMenuStrip
свойству ContextMenuStrip
формы.
Public Class Form1
'A delegate referring to the method to be executed.
Private method As [Delegate]
'An array of arguments to be passed to the method when executed.
Private arguments As Object()
Private Sub FirstToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FirstToolStripMenuItem.Click
'Execute Method1 with no arguments.
method = New Action(AddressOf Method1)
arguments = Nothing
ExecuteMethod()
End Sub
Private Sub SecondToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SecondToolStripMenuItem.Click
'Execute Method2 with text from a TextBox as arguments.
method = New Action(Of String)(AddressOf Method2)
arguments = {TextBox1.Text}
ExecuteMethod()
End Sub
Private Sub ThirdToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ThirdToolStripMenuItem.Click
'Execute Method3 with no arguments.
method = New Action(AddressOf Method3)
arguments = Nothing
ExecuteMethod()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Execute again the last method executed.
ExecuteMethod()
End Sub
Private Sub ExecuteMethod()
If method IsNot Nothing Then
'Invoke the current delegate with the current arguments.
method.DynamicInvoke(arguments)
End If
End Sub
Private Sub Method1()
MessageBox.Show("Hello World", "Method1")
End Sub
Private Sub Method2(text As String)
MessageBox.Show(text, "Method2")
End Sub
Private Sub Method3()
MessageBox.Show("Goodbye Cruel World", "Method3")
End Sub
End Class
Теперь вы можете щелкнуть правой кнопкой мыши форму и выбрать пункт меню, чтобы выполнить один из трех методов с именами Method1
, Method2
и Method3
. Если вы нажмете Button
, он будет выполнен заново в зависимости от того, что было выполнено в последний раз.
Я также показал, как вы можете выполнять метод с аргументами и без них. Просто обратите внимание, что в этом случае нажатие Button
после выбора пункта меню «Второй» выполнит Method2
с тем, что TextBox
содержалось в то время, когда оно было выполнено в первый раз, а не с тем, что оно содержит сейчас. Если вам нужно было использовать текущее значение, вы должны получить его внутри метода, а не передавать его в качестве аргумента. Я просто включил эту часть, чтобы продемонстрировать передачу аргументов делегатам.