DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コンテキストメニューについて

分類:[.NET]

はじめまして

ファイルから読み込んでコンテキストメニューに以下のように
追加しているのですが
ContextMenu2.MenuItems.Add(strTemp(0), New EventHandler(AddressOf
MenuItem_Click))

MenuItem_Click に以下のようにしているのですが
Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As
system.EventArgs)
Dim lngNumber As Integer '選択されたアプリの番号

Try
System.Diagnostics.Process.Start(typAppList  
                   (lngNumber).strPath)
Catch
End Try
ここで問題なのがlngNumberにはコンテキストメニューの選択された位置です
リストボックスのSelectedIndexみたいに
この位置を知りたいのですがどのようにすればいいのですか

よろしくお願いします
> Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As
> system.EventArgs)
> Dim lngNumber As Integer '選択されたアプリの番号
> ここで問題なのがlngNumberにはコンテキストメニューの選択された位置です

sender から「クリックされたメニューそのもの」が得られますので、
あとはその Index プロパティから、位置を知る事ができるかと。
■No14266に返信(魔界の仮面弁士さんの記事)
> sender から「クリックされたメニューそのもの」が得られますので、
> あとはその Index プロパティから、位置を知る事ができるかと。

Indexプロパティはありませんよね?
sender Is [Hoge]から分岐になるかと思うのですが・・・
>>sender から「クリックされたメニューそのもの」が得られますので、
>>あとはその Index プロパティから、位置を知る事ができるかと。
> Indexプロパティはありませんよね?

はいこーんさんの環境にはありませんでしたか?

当方では kuro さんのコードに Index プロパティから取得するコードを
1行追加するだけで拾えたのですが。

http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsmenuitemclassindextopic.asp
■No14267に返信(はいこーんさんの記事)
> ■No14266に返信(魔界の仮面弁士さんの記事)
>>sender から「クリックされたメニューそのもの」が得られますので、
>>あとはその Index プロパティから、位置を知る事ができるかと。
>
> Indexプロパティはありませんよね?
> sender Is [Hoge]から分岐になるかと思うのですが・・・

Indexプロパティはありませんよね?
今これで悩んでいたのですが
Indexプロパティはありません

sender Is [Hoge]から分岐になるかと思うのですが・・・
senderには以下のように入っています

System.Windows.Forms.MenuItem, Items.Count: 0, Text: zip
System.Windows.Forms.MenuItem, Items.Count: 0, Text: tesuto

もっと解からなくなりました
具体的にどうしたらよいのでしょうか
宜しくお願いします
■No14270に返信(魔界の仮面弁士さんの記事)
> >>sender から「クリックされたメニューそのもの」が得られますので、
> >>あとはその Index プロパティから、位置を知る事ができるかと。
>>Indexプロパティはありませんよね?
>
> はいこーんさんの環境にはありませんでしたか?
>
> 当方では kuro さんのコードに Index プロパティから取得するコードを
> 1行追加するだけで拾えたのですが。
>
> http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsmenuitemclassindextopic.asp

魔界の仮面弁士さん
> 当方では kuro さんのコードに Index プロパティから取得するコードを
> 1行追加するだけで拾えたのですが。

とのことですが具体的にはどのようにしたのですか
これが出来ればポップアップランチャーが出来そうなので
宜しくお願いします
お世話になります。

Dim index As Integer
If TypeOf sender Is MenuItem Then
  index = DirectCast(sender , MenuItem).Index
End If

ということでは。
■No14270に返信(魔界の仮面弁士さんの記事)
> はいこーんさんの環境にはありませんでしたか?
>
> 当方では kuro さんのコードに Index プロパティから取得するコードを
> 1行追加するだけで拾えたのですが。

弁士先生。ごめんなさい。
MSDNで見ているクラスが間違ってましたw
> If TypeOf sender Is MenuItem Then
>   index = DirectCast(sender , MenuItem).Index
> End If

たぶんセパレータも含んでますよね。
できれば単純なリスト以外は番号に意味を持たせたコードはしたくないですね。
順序も変更できますし。
かといってMenuItemにはTagが無いし。。。
#個人的にはアイコン付メニューとして継承クラスを使ってますのでTag系を装備してありますが。
お世話になります。

■No14276に返信(まどかさんの記事)
index の話題になっていたので、
上の投稿をしました。
私も MenuItem を継承して、自分用プロパティを実装する事をオススメします。
■No14273に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> Dim index As Integer
> If TypeOf sender Is MenuItem Then
>   index = DirectCast(sender , MenuItem).Index
> End If
>
> ということでは。

kuroです

これで出来ました
どうもありがとう御座いました
>私も MenuItem を継承して、自分用プロパティを実装する事をオススメします。
これも試してみます 出来るかな

皆さんすばやいレスありがとう御座います
解決済み!
> かといってMenuItemにはTagが無いし。。。

2005 つか .NET Framework 2.0 の ToolStripMenuItem には Tag があって便利なんですよねー
HashTableにMenuItemとインデックスを関連付けて置くのはどうでしょう?
…広いスコープにHashTableを置かないとだめだから、ちょっと汚いですね(orz

DOBON.NET | プログラミング道 | プログラミング掲示板