4

グリッド コントロールに ContextMenuStrip があります。

GridContextMenu と名付けました。

GridContextMenu には、次のコードを使用して 4 ~ 5 個の項目が取り込まれます。

 gridcontextMenu.Items.Add(new ToolStripMenuItem
                        {
                            Name = Plants,
                            Text = Plants,
                            Tag = Plants,
                            Width = 100,
                            Image = <image source is put here>
                        });

gridcontextMenu.Items.Add(new ToolStripMenuItem
                        {
                            Name = Animals,
                            Text = Animals,
                            Tag = Animals,
                            Width = 100,
                            Image = <image source is put here>
                        });

ツールストリップの動物メニューの場合、次の方法でサブメニューを追加しました

(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Tiger", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Lion", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Elephant", image_source, new EventHandler(SubmenuItem_Click));

SubmenuItem_Click イベント ハンドラーでは、どの動物のサブメニューがクリックされたかを知る必要があります。

これを達成する方法は?

現在、私は次の方法でイベントハンドラーのコードを持っています:

private void SubmenuItem_Click(object sender, EventArgs e)
{
}

このイベントで、どの動物サブメニューが選択されたかを確認するにはどうすればよいですか? 親切に答えを共有してください。

4

5 に答える 5

12

次のようなことができます。

private void SubmenuItem_Click(object sender, EventArgs e)
{
    var clickedMenuItem = sender as MenuItem; 
    var menuText = clickedMenuItem.Text;

    switch(menuText) {
        case "Tiger":
           break;

        case "Lion":
          break;
         . ...
    }
}
于 2012-11-30T07:44:53.257 に答える
3

Tagアプリケーションをローカライズする必要がある場合に、この目的で使用できます。さらにTag、オブジェクトなので、そこにデータの任意のテープを配置できます。たとえばEnumタイプ。

private void SubmenuItem_Click(object sender, EventArgs e)
{
    var clickedMenuItem = sender as MenuItem; 
    EnumType item = (EnumType)clickedMenuItem.Tag;

    switch(item) {
        case TigeItem:
           break;
        case LionItem:
          break;
         ...
    }
}
于 2012-11-30T08:18:48.823 に答える
2

ここで他の答えがどれも機能しないことがわかったので、掘り下げて適切な解決策を見つけました。これは .NET Framework 4+ でのみ適用可能だった可能性がありますが、ここで動作することがわかりました。

基本的にItemClicked、コントロール内のイベントは、イベントが発生したときにContextMenuStrip送信者およびToolStripItemClickedEventArgsオブジェクトとして自身を渡します。クリックされた項目を ContextMenuStrip 自体から取得することはできないため、この情報を取得する唯一の方法は、ToolStripItemClickedEventArgsオブジェクトに問い合わせることであり、クリックされた項目はオブジェクトとしてそこに存在しToolStripItemます。これを使用して、必要に応じて if/switch ステートメントで使用するオプションの名前を抽出できます。下記参照:

EventHandler を構成するには:

...
contextMenuStrip1.ItemClicked += OnContextMenuItem_Clicked;
...

イベントを処理し、クリックされた項目のテキストを取得するには:

private void OnContextMenuItem_Clicked(object sender, ToolStripMenuItemClickedEventArgs e)
{
    ToolStripItem clickedItem = e.ClickedItem;
    string itemName = clickedItem.Text;
    ...
}

うまくいけば、これは将来この答えを探している人に役立ちます:)

于 2018-06-26T13:59:20.723 に答える
-1
private void SubmenuItem_Click(object sender, EventArgs e)
{        
    string clickedItemName=e.ClickedItem.Text;
}
于 2017-05-23T07:47:42.133 に答える