1

これがコードです。Form1 Load イベント:

private void Form1_Load(object sender, EventArgs e)
{
    if (listBox1.Items != null && listBox1.Items.Count > 0)
    {
        listBox1.Select();
        label4.Text = listBox1.SelectedItem.ToString();
        string startTag = "Url: ";
        string endTag = " ---";
        int startTagWidth = startTag.Length;
        int endTagWidth = endTag.Length;
        int index = 0;
        index = label4.Text.IndexOf(startTag, index);
        int start = index + startTagWidth;
        index = label4.Text.IndexOf(endTag, start + 1);
        string g = label4.Text.Substring(start, index - start);
        label4.Text = g;
        mainUrl = g;
        listboxContextMenu = new ContextMenuStrip();
        listboxContextMenu.Opening += new CancelEventHandler(listboxContextMenu_Opening);
    }
}

次に、listBox の mouseDown イベント:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        int index = listBox1.IndexFromPoint(e.Location);
        {
            if (index == listBox1.SelectedIndex)
            {
                listboxContextMenu.Show();
            }
        }
    }
}

続いてオープニングイベント。

private void listboxContextMenu_Opening(object sender, CancelEventArgs e)
{
    //clear the menu and add custom items
    listboxContextMenu.Items.Clear();
    listboxContextMenu.Items.Add(string.Format("Edit - {0}", listBox1.SelectedItem.ToString()));
}

それが何をするかというと、マウスの右ボタンで listBox の特定の項目をクリックすると、contextMenu が表示されます。

問題は、フォームではなく画面の左上隅にある画面の左上隅に contextMenu が常に表示されることです。

2 つ目の問題は、選択した項目を 2 回目にクリックしたときにのみ、コンテキスト メニューが表示されることです。プログラムを実行しているとき、listBox の最初の項目は既に選択されていますが、その項目を 2 回クリックしたときにのみコンテキスト メニューが表示されます。その後、毎回1回クリックしますが、最初にプログラムを実行するときに、右ボタンのクリックを2回クリックする必要があります。

これら2つの問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

MouseUp Event代わりに使用MouseDown Event

    private void listBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            int index = listBox1.IndexFromPoint(e.Location);
            if (index == - 1) return;
            listBox1.SelectedIndex = index;
            listboxContextMenu.Show(listBox1, listBox1.PointToClient(System.Windows.Forms.Cursor.Position));
        }
    }
于 2013-02-16T23:13:52.803 に答える