|
■No84344 (じょなさん さん) に返信 > メニューバーは表示されるものの、 > メニューをクリックしてもsubは機能しません。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim menuFile As New ToolStripMenuItem("メニュー") menuFile.DropDownItems.Add("コピー", Nothing, New System.EventHandler(AddressOf Copy_form)) Me.MenuStrip1.Items.Add(menuFile) End Sub Private Sub Copy_form(sender As Object, e As EventArgs) MsgBox("Click!") End Sub
というのは、[メニュー]-[コピー]の Click イベントを処理しているだけで、 [メニュー]の Click イベントを処理しているわけではありません。
[メニュー]の Click イベントを処理したいのであれば、 menuFile を作成する際のコンストラクタで onClick パラメーターを指定しましょう。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim menuFile As New ToolStripMenuItem("メニュー", Nothing, AddressOf Copy_form) menuFile.DropDownItems.Add("コピー", Nothing, AddressOf Copy_form) Me.MenuStrip1.Items.Add(menuFile) End Sub Private Sub Copy_form(sender As Object, e As EventArgs) Dim tsmi = DirectCast(sender, ToolStripMenuItem) Button1.Text = tsmi.Text End Sub
もしくは、メニューを作成した後でイベントを割り当てることもできます。 この場合は New の引数で指定するのではなく、AddHandler を使えば OK です。
Dim menuFile As New ToolStripMenuItem("メニュー") Me.MenuStrip1.Items.Add(menuFile) 'AddHandler menuFile.Click, AddressOf Copy_form
もしくは、WithEvents + Handles でもイベントを処理できます。
Public Class Form1 Private WithEvents menuFile As ToolStripMenuItem Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Button1.Enabled = False menuFile = New ToolStripMenuItem("メニュー") Me.MenuStrip1.Items.Add(menuFile) End Sub Private Sub Copy_form(sender As Object, e As EventArgs) Handles menuFile.Click menuFile.Text &= "!" End Sub End Class
|