C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: メニューバーのボタンに機能をもたせる方法


(過去ログ 144 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■84344 / inTopicNo.1)  メニューバーのボタンに機能をもたせる方法
  
□投稿者/ じょなさん (1回)-(2017/06/17(Sat) 12:23:20)

分類:[.NET 全般] 


どこかのwebページを参考にして



ContextMenuStrip1.Items.Add("コピー", Nothing, New System.EventHandler(AddressOf Copy_form))

とすることで、コンテキストメニューをクリックした時に
指定したsubを機能させることができました。


同様にメニューバーをクリックした時にも
指定したsubを機能させたいのですが




Dim menuFile As New ToolStripMenuItem("メニュー")
menuFile.DropDownItems.Add("コピー", Nothing, New System.EventHandler(AddressOf Copy_form))
Me.MenuStrip1.Items.Add(menuFile)


とやっても、
メニューバーは表示されるものの、
メニューをクリックしてもsubは機能しません。

どのようにすれば良いですか?


引用返信 編集キー/
■84345 / inTopicNo.2)  Re[1]: メニューバーのボタンに機能をもたせる方法
□投稿者/ 魔界の仮面弁士 (1324回)-(2017/06/17(Sat) 15:05:29)
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
引用返信 編集キー/
■84346 / inTopicNo.3)  Re[1]: メニューバーのボタンに機能をもたせる方法
□投稿者/ 魔界の仮面弁士 (1325回)-(2017/06/17(Sat) 15:49:06)
追記。

No84344 (じょなさん さん) に返信
> 同様にメニューバーをクリックした時にも

[メニュー] や [メニュー]-[コピー] といった項目をクリックしたときではなく、
メニューバーそのものをクリックしたときに反応させたいということであれば

Private Sub MenuStrip1_Click(sender As Object, e As EventArgs) Handles MenuStrip1.Click

あたりを使えば反応します。
Handles 句を使うかわりに AddHandler ステートメントで割り当てても可。
引用返信 編集キー/
■84347 / inTopicNo.4)  Re[2]: メニューバーのボタンに機能をもたせる方法
□投稿者/ じょなさん (2回)-(2017/06/17(Sat) 15:58:59)
うまくいきました
ありがとうございます。
 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -