【学習】WinFormsでContextMenuStripを使ってみよう(右クリックメニューを表示する)

広告

ContextMenuStrip は、コントロールを右クリックしたときに表示するメニューです。ListBoxの項目に「コピー」「削除」などの操作を追加できます。

ListBoxの項目を右クリックするとコピーと削除のContextMenuStripが表示されることを示す図

今回作るもの

ListBoxの項目を右クリックすると「コピー」と「削除」が表示されるアプリを作ります。

フォームに配置するもの

コントロールName役割
ListBoxitemListBox項目を表示する
ContextMenuStripitemContextMenuStrip右クリックメニュー

ContextMenuStrip は画面上に直接表示されるコントロールではありません。フォームへ追加すると、デザイナー下部のコンポーネントトレイに表示されます。

メニュー項目を追加する

  1. itemContextMenuStrip を選択する
  2. 「ここへ入力」に「コピー」と入力する
  3. 次の行に「削除」と入力する
  4. Nameをそれぞれ copyMenuItemdeleteMenuItem にする

ListBoxと関連付ける

itemListBoxContextMenuStrip プロパティを 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# WinForms 入門シリーズの目次へ戻る

訪問数 4 回, 今日の訪問数 4回

広告