• 締切済み

VS C# のコンテキストの動作について

VS C# のコンテキストの動作がうまくいきません、助けてください>< List Viewのアイテムを右クリックしたときに「アイテム名を表示させる」というコンテキストを表示し、それをクリックするとアイテム名を表示させるというプログラムを組んだのですが、一度目はうまく動作するのですが、その後、List Viewのアイテムのない場所を右クリックしてもコンテキストが表示されてしまいます。 何が原因なんでしょうか? 教えてください、お願いします。 以下コード 前略 private void ListView_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { ConTextMenu(); } } private void ConTextMenu() { ContextMenuStrip cms = new ContextMenuStrip(); ToolStripMenuItem menu1 = new ToolStripMenuItem(); menu1.Text = "アイテム名を表示させる"; cms.Items.AddRange(new ToolStripMenuItem[] { menu1} ); menu1.Click += new EventHandler(menu_Click); this.ContextMenuStrip = cms; } private void menu_Click(object sender, EventArgs e) { string msg = sender.ToString(); if (msg == "アイテム名を表示させる") { ListViewItem item1 = new ListViewItem(); item1 = songlist.SelectedItems[0]; iname = item1.SubItems[0].Text; MessageBox.show(iname.Tostring()); }

みんなの回答

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

ものすごく問題あるコードを多々書いておられますが。。。 > その後、List Viewのアイテムのない場所を右クリックしてもコンテキストが表示されてしまいます これだけに限定して回答すれば、 > this.ContextMenuStrip = cms; this が何か分かってますか? コードにカーソル当てれば表示してくれると思いますが、Form になってると 思います。つまり、「フォーム上のどこでもコンテキストメニューを表示する」 ようにプログラムされているからです。 ListView 以外でも表示されませんか?

回答No.1

ContextMenuを表示させるには,通常はContextMenuプロパティまたはContextMenuStripプロパティにメニューを設定することで行います。 # ContextMenuStripが推奨されます。 また,ContextMenuを開いたタイミングで変更したい場合は,ContextMenuのPopupイベントまたはContextMenuStripのOpeningイベントで行います。 今回はわざわざContextMenuを修正する必要性はなさそうですが。