トップ回答者
メニューのコントロール名を取得するには?

質問
-
以下のようにやると「指定されたキャストは有効ではありません」という実行エラーとなり困っています。
ボタンコントロールではこの方法でうまくできるのですが…。
また、「Control」を「MenuItem」にし、「Name」を「Text」に変えればメニュー名は取得できるのですが…。
どうやればいいのでしょうか?Private Sub MenuClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuメニューA.Click, mnuメニューB.Click, mnuメニューC.Click
Dim sメニュー名 As String = CStr(CType(sender, Control).Name)
Select Case sメニュー名
Case "mnuメニューA"
Case "mnuメニューB"
Case "mnuメニューC"
End Select
End Sub
回答
-
.Net 1.1だとやれることが少ない・・・
Private Sub MenuClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuメニューA.Click, mnuメニューB.Click, mnuメニューC.Click Dim mi As MenuItem = CType(sender, MenuItem) If mi Is mnuメニューA Then MessageBox.Show(mnuメニューA.Text) ElseIf mi Is mnuメニューB Then MessageBox.Show(mnuメニューB.Text) ElseIf mi Is mnuメニューC Then MessageBox.Show(mnuメニューC.Text) End If 'selectでやりたい場合のやりかた 'Select Case True ' Case mi Is mnuメニューA ' MessageBox.Show(mnuメニューA.Text) ' Case mi Is mnuメニューB ' MessageBox.Show(mnuメニューB.Text) ' Case mi Is mnuメニューC ' MessageBox.Show(mnuメニューC.Text) 'End Select End Sub
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 Tak1waMVP, Moderator 2017年7月13日 9:39
- 回答としてマーク こまってます 2017年7月18日 2:56
すべての返信
-
こんにちは。
MenuItemはControlを継承していないので実行エラーになっているのだと思います。
https://msdn.microsoft.com/en-us/library/system.windows.forms.menuitem(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.control(v=vs.110).aspx> また、「Control」を「MenuItem」にし、「Name」を「Text」に変えればメニュー名は取得できるのですが…。
これは何が問題なのですか?
-
すみません、根本的に勘違いしていたかもしれません。
WindowsFormだと思い込んでました。
どの環境で作成していますか?またMenuItemの生成部分を提示できますでしょうか。
- 編集済み Tak1waMVP, Moderator 2017年7月13日 8:43
-
.Net 1.1だとやれることが少ない・・・
Private Sub MenuClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuメニューA.Click, mnuメニューB.Click, mnuメニューC.Click Dim mi As MenuItem = CType(sender, MenuItem) If mi Is mnuメニューA Then MessageBox.Show(mnuメニューA.Text) ElseIf mi Is mnuメニューB Then MessageBox.Show(mnuメニューB.Text) ElseIf mi Is mnuメニューC Then MessageBox.Show(mnuメニューC.Text) End If 'selectでやりたい場合のやりかた 'Select Case True ' Case mi Is mnuメニューA ' MessageBox.Show(mnuメニューA.Text) ' Case mi Is mnuメニューB ' MessageBox.Show(mnuメニューB.Text) ' Case mi Is mnuメニューC ' MessageBox.Show(mnuメニューC.Text) 'End Select End Sub
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 Tak1waMVP, Moderator 2017年7月13日 9:39
- 回答としてマーク こまってます 2017年7月18日 2:56