【学習】WinFormsでContextMenuStripを使ってみよう(右クリックメニューを表示する)
広告
ContextMenuStrip は、コントロールを右クリックしたときに表示するメニューです。ListBoxの項目に「コピー」「削除」などの操作を追加できます。

今回作るもの
ListBoxの項目を右クリックすると「コピー」と「削除」が表示されるアプリを作ります。
フォームに配置するもの
| コントロール | Name | 役割 |
|---|---|---|
| ListBox | itemListBox | 項目を表示する |
| ContextMenuStrip | itemContextMenuStrip | 右クリックメニュー |
ContextMenuStrip は画面上に直接表示されるコントロールではありません。フォームへ追加すると、デザイナー下部のコンポーネントトレイに表示されます。
メニュー項目を追加する
itemContextMenuStripを選択する- 「ここへ入力」に「コピー」と入力する
- 次の行に「削除」と入力する
- Nameをそれぞれ
copyMenuItem、deleteMenuItemにする
ListBoxと関連付ける
itemListBox の ContextMenuStrip プロパティを itemContextMenuStrip に設定します。これでListBox上の右クリックに反応してメニューが表示されます。
項目を準備する
public Form1()
{
InitializeComponent();
itemListBox.Items.Add("りんご");
itemListBox.Items.Add("みかん");
itemListBox.Items.Add("ぶどう");
}
コピー処理
private void copyMenuItem_Click(object sender, EventArgs e)
{
if (itemListBox.SelectedItem is string text)
{
Clipboard.SetText(text);
}
}
何も選択されていない場合は処理しません。Clipboard.SetText には空文字列を渡せないため、選択の確認が大切です。
削除処理
private void deleteMenuItem_Click(object sender, EventArgs e)
{
int index = itemListBox.SelectedIndex;
if (index >= 0)
{
itemListBox.Items.RemoveAt(index);
}
}
右クリックした項目を選択する
標準のListBoxでは、右クリックだけでは選択項目が切り替わらないことがあります。右クリックした場所の項目を操作したい場合は、MouseDown イベントで選択を合わせます。
private void itemListBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
{
return;
}
int index = itemListBox.IndexFromPoint(e.Location);
if (index >= 0)
{
itemListBox.SelectedIndex = index;
}
}
まとめ
- ContextMenuStripは右クリック時の操作をまとめる
- 対象コントロールのContextMenuStripプロパティで関連付ける
- 選択項目がない場合を必ず考える
- 右クリックした項目を扱うならMouseDownで選択を合わせる
広告
C#,WindowsFormアプリ,初学者C#,ContextMenuStrip,ListBox,WinForms,初学者
Posted by hidepon
関連記事

【C#入門】MyButtonで継承を体験しよう|Buttonを引き継いで機能を追加する
前回は、Button が Control を継承しているため、Text、Size ...

【学習】WinFormsでToolTipを使ってみよう(マウスオーバーでヒントを表示する)
これまでの学習では、 ボタンやテキストボックスを配置する Label で説明文を ...

【学習】WinFormsでTrackBarを使ってみよう(スライダーで値を調整する)
TrackBar は、つまみを左右に動かして数値を選ぶコントロールです。音量や明 ...

【C#入門】同じ型でも動きが変わる|WinFormsで学ぶポリモーフィズムとvirtual・override
前回は、Button、Label、TextBox を共通の Control 型と ...

【学習】WinFormsでStatusStripを使ってみよう(フォーム下部に状態を表示する)
StatusStrip は、フォーム下部にアプリの状態を表示するためのコントロー ...



ディスカッション
コメント一覧
まだ、コメントがありません