動的に生成したメニュー項目のイベントを取得するには?

解決


maica  2005-11-12 23:35:32  No: 92618

よろしくお願いします。VB.NETを使ってシステムを組んでいます。

テーブルから取得したキーを使い、動的に階層構造のメニューを作成したのですが、選択されたメニューがどのメニューなのかが判断できません。
エクスプローラーを例に上げると、ファイル(F)の「削除(D)」と、編集の「コピー(C)」(共に3番目の項目とする)の判断がつかないのです。

その判断できない、現在行っている方法はINDEXを取得するというものです。
勉強不足で的を外した質問ではあるかもしれませんが、ご教示願いします。


KG  2005-11-13 02:35:16  No: 92619

作成するときにCaptionも変更するでしょうから
その際に、IndexとCaptionの情報を配列等使って
関連付けておくとか、、、

#単純にCaptionをみて判断するのはダメなのかなとか思ったり|=x=;


KG  2005-11-13 02:40:39  No: 92620

あ、VB6と勘違いしておりました。
失礼致しました。orz

#Select Case mnuHoge(Index).Caption
#みたいなことはできないのかな|_ _;


maica  2005-11-13 03:40:49  No: 92621

KGさん、レスありがとうございます。
使用しているコントロール「Menuitems」にCaptionというのは含まれていないようです。
参考までに現在のソースコードを記載します。

  Dim mitem As New MenuItem("テーブル項目")
  menuFile.MenuItems.Add(mitem)
  AddHandler mitem.Click, AddressOf Clicked

  Private Sub Clicked(ByVal sender As Object, ByVal e As EventArgs)

     MessageBox.Show(mi.Index.ToString())

  End Sub

クリックイベントを割当てる際にテーブルから取得した固有コードを割当てる事ができればよいのですが、そのようなプロパティ(?)が見当たりません

最初に書くべき事でしたが、私自身、このような掲示板を利用するのは初めてです。
記述内容に至らない部分がありましたらご指摘ください。


ガッ  2005-11-13 04:42:26  No: 92622

.NETは畑違いなのでさらっと聞き流してかまいませんが、
MenuItemをInheritした、(例えば)MyMenuItemというクラスをMenuに登録できれば楽ができそうですね。


maica  2005-11-14 20:19:09  No: 92623

ガッさん、遅くなりました。レスありがとうございます。
Inheritを調べた後、「MenuItem」を継承したクラスを作成することにより「Tag」プロパティを追加して実現することが出来ました。
ありがとうございました。

 Public Class MyMenuItem
     Inherits MenuItem
     Public Tag As Object
 End Class

 Dim mitem As New MyMenuItem
 mitem.Text = テーブル項目  ←(名称)
 mitem.Tag = テーブル項目   ←(ID)
 menuFile.MenuItems.Add(mitem)
 AddHandler mitem.Click, AddressOf Clicked


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加