• 締切済み

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を修正する必要性はなさそうですが。

関連するQ&A

  • コンテキストメニュークリック時のイベントハンドラ

    C#にてフォームアプリを作成しています。 そこでツリービューに表示されたノードを右クリックしたときにコンテキストメニューが表示される ように下記のように記述しました。表示されたノードの上で右クリックすると「Export」、「Import」 というメニューが表示されます。 しかし、イベントハンドラの書き方がよくわかりません。 「Export」又は「Import」がクリックされたというイベントはどう検出すればよいでしょうか。 // ノード右クリック時の動作 private void treeView1_MouseDown(object sender, MouseEventArgs e) { // 右クリックでもノードを選択させる if (e.Button == MouseButtons.Right) { // ノードの選択 treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); // コンテクストメニューの作成 ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripMenuItem openLabel = new ToolStripMenuItem(); openLabel.Text = "Export"; ToolStripMenuItem deleteLabel = new ToolStripMenuItem(); deleteLabel.Text = "Import"; contextMenu.Items.Add(openLabel); contextMenu.Items.Add(deleteLabel); // ツリービューにコンテキストメニューを追加 treeView1.ContextMenuStrip = contextMenu; } }

  • C# 2010 contextMenuStripのファンクション名の不

    C# 2010 contextMenuStripのファンクション名の不思議? まず2ケのメニューアイテムを持つcontextMenuStripを作り、それぞれのTEXTを試験1、試験3と改名します ダブルクリックするとハンドラーが出来て、その名称が(1)(2)のように TEXT名+ToolStripMenuItem_Click なります ここでいったんプロジェクトを終了して再ロードします 画像のように試験1と試験3の間に『試験3を途中に追加』を入れてダブルクリックして作ったファンクション名は前2者とは異なり (3)の如くtoolStripMenuItem1_Click となってしまいます なぜ 試験2を途中に追加ToolStripMenuItem_Click にならないのでしょうか? private void 試験1ToolStripMenuItem_Click(object sender, EventArgs e) --- (1) { } private void 試験3ToolStripMenuItem_Click(object sender, EventArgs e) --- (2) { } private void toolStripMenuItem1_Click(object sender, EventArgs e) --- (3) { } 追伸 『試験3を途中に追加』が長すぎるかと思い、『試験3』だけにしても結果は同じでした

  • どのオブジェクトでコンテキストメニューの項目をクリックしたか?

    大変申しありません。教えていただきたいのですが、 'メインのformで動的に幾つか作成します Dim pBox As New PictureBox 'VB studioでGUIで作成したコンテキストメニューをセットします pBox.ContextMenuStrip = ContextMenuStrip のような感じ(省略してあります)作りました。 そしてpBoxを右クリックしてコンテキストメニューのイベントを受け取ったのですが sender はコンテキストメニューアイテムでした。 右クリックされたpBoxを取得したい場合はどうすればよいでしょうか? スミマセン!!よろしくお願いします。

  • C# 2010 PrintPreviewDialogからの印刷でバルー

    C# 2010 PrintPreviewDialogからの印刷でバルーンを表示する方法? ContextMenuStripを作り、上に『印刷』下には『印刷プレビュー』としました 印刷を選択するとnotifyIconにバルーンを表示するようにしました ところでPrintPreviewDialogには印刷釦があります この印刷釦を押下した時にも同様にバルーンを表示するには、如何なる方法があるのでしょうか? 全く見当も着きません、教えてください、お願いします!!! private void 印刷ToolStripMenuItem_Click(object sender, EventArgs e) { BalloonShow(); //notifyIconにバルーンを表示; this.printDocument1.Print(); } private void 印刷プレビューToolStripMenuItem_Click(object sender, EventArgs e) { PrintPreviewDialog ObjectPrintPreviewDialog = new PrintPreviewDialog(); ObjectPrintPreviewDialog.Document = this.printDocument1; ObjectPrintPreviewDialog.ShowDialog(); } private void BalloonShow() //バルーンを表示 { notifyIcon1.BalloonTipText = "どうしたらバルーンが出ますか?"; }

  • ToolStripMenuItemの選択(VB)

    フォーム上に、デザイン時に作成されたContextMenuStripに対して、 プログラム内で動的にそのメニューアイテム(ToolStripMenuItem)を追加します。 これが2階層までは、「ToolStripMenuItem.DropDownItemClicked」というイベントで取得できますが、 それより深い階層に動的に追加されたアイテムに対してのクリック(選択)が判別できません。 ContextMenuStripに、深い階層で動的に追加されたToolStripMenuItemのクリックを取得するには、 どうしたらよいでしょうか。 大元の、ContextMenuStripのClosingイベントで、大元から1つずつ選択されたノードを辿っていこうと考えましたが、selectedプロパティでは、最上階層までしか判別できません。 分かる方、教えて下さい。お願いします。

  • [C#] ContextMenuStrip を呼び出したセルの特定

    DataGridViewのどのセルを右クリックしてポップアップメニュー(ContextMenuStrip) が表示されたか知りたいのですが using System; using System.Windows.Forms; public class MyForm : Form { DataGridView dgv; DataGridViewTextBoxColumn dgvColumn1; FileDialog fileDlg; ContextMenuStrip popup; ToolStripMenuItem popupItem; public MyForm() { dgv = new DataGridView(); dgvColumn1 = new DataGridViewTextBoxColumn(); fileDlg = new OpenFileDialog(); popup = new ContextMenuStrip(); popupItem = new ToolStripMenuItem(); dgvColumn1.HeaderText = "column1"; dgvColumn1.ContextMenuStrip = popup; dgv.Dock = DockStyle.Fill; dgv.RowTemplate.Height = 16; dgv.Columns.Add(dgvColumn1); popupItem.Text = "file"; popupItem.MouseUp += delegate(object sender, MouseEventArgs e) { if (fileDlg.ShowDialog() == DialogResult.OK) { //右クリックしたセル.Text = filedlg.FileName; } }; // popup menu popup.Items.Add(popupItem); Controls.Add(dgv); } } 上のソースにて、 http://dobon.net/vb/dotnet/control/cmsourcecontrol.html にあるように、popup.SourceControlを用いても、DataGridView コントロールしか返って来ません。 となると、DataGridViewのCellMouseEventハンドラを実装する必要が出てくると思うのですがこれ以外解決方法ってないですかね・・?

  • VS2013でバージョン情報ダイアログを作る

    Visual Studio 2013でプログラムを作っているときにメニューバーを配置し、 「ヘルプ=>バージョン情報」と構成し、バージョン情報をクリックすると、 別で用意したバージョン情報フォームを表示させたいのですが、 'バージョン情報 Private Sub バージョン情報ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles バージョン情報ToolStripMenuItem.Click ShowDialog(AboutBox1) End Sub としても、 追加情報:既に表示されているフォームをモーダル ダイアログ ボックスとして表示できません。showDialog を呼び出す前に、フォームの Visible プロパティを false にしてください。 と表示されてしまいます。 どのようにすればうまくいくでしょうか。よろしくお願いします。

  • Winzip をコンテキストメニューに追加したい

    Windows7 に Winzip 90-SR1 をインストールしました。 今まで使っていた XP では、エクスプローラーでファイル名を右クリックすると、 コンテキストメニューに winzip と表示されていました(画像参照)が、 Windows7 のエクスプローラーでは表示されません。 この画像と同じように、Windows7 でのエクスプローラーでも winzip を コンテキストメニューに表示するにはどうしたらいいのでしょうか? ネットで「コンテキストメニューに追加」で探してみましたが 適切な情報が見つかりませんでした。 ご存知のかた、教えていただけますでしょうか。 よろしくお願いします。

  • private voidなメソッドはstatic コンテキストですか

    コンパイルエラーで、 「static コンテキストから参照することはできません」 と表示されます。 ソースにstaticという文字は有りません。 private voidなメソッドはstatic コンテキストですか? [Foo.java] import com.nttdocomo.ui.*; public class Foo extends IApplication {  public void start() {   Display.setCurrent(new MyPanel());  } } class MyPanel extends Panel {  private void e() {   Bar.DShow(Dialog.DIALOG_ERROR, "", "");  } } [Bar.java] import com.nttdocomo.ui.*; public class Bar {  public void DShow(int type, String title, String body) {   Dialog d = new Dialog(type, title);   d.setText(body);   d.show();  } }

    • ベストアンサー
    • Java
  • 標準コンテキストメニューのイベント取得方法について

    お世話になります。 現在、VS2010 C#で作成したTextboxの右クリック時に表示される コンテキストメニュー(元に戻す、切り取り、コピー他)を選択された時の イベントが取得できず調査しております。 下記、参考サイト(2)を見てみたのですが、 Formのload時に「this.○○.ContextMenuStrip.Opening」を 実施しても「ContextMenuStrip」がnullとなります。。。 何か方法がございましたらご教示頂けないでしょうか? ■参考サイト (1)http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35503&forum=7 (2)http://blogs.yahoo.co.jp/kenatzh/31673805.html

専門家に質問してみよう