header
CodePanic! > C#.NET Tips > 今ここ

■項目を右クリックでも選択できるようにする

ListBoxで、項目を右クリックでも選択できるようにするには
自分でマウスイベントを捕捉して
マウスポインター位置より選択すべきアイテムのインデックスを取得し
そのアイテムを選択させます。
他にも方法はあると思いますが参考程度に

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 適当に項目を追加
            for(int i = 0; i < 100; i++)
            {
                listBox1.Items.Add(i.ToString());
            }

            // マウスボタンが離されたイベント取得
            listBox1.MouseUp += new MouseEventHandler(listBox1_MouseUp);
        }

        void listBox1_MouseUp(object sender, MouseEventArgs e)
        {
            // 右クリックされた?
            if(e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                // マウス座標から選択すべきアイテムのインデックスを取得
                int index = listBox1.IndexFromPoint(e.Location);

                // インデックスが取得できたら
                if(index >= 0)
                {
                    // すべての選択状態を解除してから
                    listBox1.ClearSelected();

                    // アイテムを選択
                    listBox1.SelectedIndex = index;
                }
            }
        }
    }
}

なお、コンテキストメニューを割り当てている場合は
マウスクリックのイベントそのものが発生しなかったりしますが
その場合も
自分でコンテキストメニューをハンドラ内で表示させるなどしてください。

    // インデックスが取得できたら
    if(index >= 0)
    {
        // すべての選択状態を解除してから
        listBox1.ClearSelected();

        // アイテムを選択
        listBox1.SelectedIndex = index;

        // コンテキストメニューを表示
        Point pos = listBox1.PointToScreen(e.Location);
        contextMenuStrip1.Show(pos);
    }





Copyright © 2008.07 - shougo suzaki