我只是在单击鼠标右键时向listBox添加了一个上下文,但它没有;工作不正常

本文关键字:上下文 一个 工作 不正常 单击 鼠标 右键 添加 listBox | 更新日期: 2023-09-27 17:59:56

这是代码。Form1加载事件:

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()));
}

它的作用是,当我用鼠标右键点击列表框中的特定项目时,它会显示contextMenu。

问题是,contextMenu一直显示在屏幕的左上角,而不是Form,而是屏幕左上角。

第二个问题是,连续菜单只在我第二次单击所选项目时显示。当我运行程序时,列表框中的第一个项目已经被选中,但只有当我在该项目上单击两次时,连续菜单才会显示。之后我每次点击一次,但第一次运行程序时,我需要点击两次右键。

我该如何解决这两个问题?

我只是在单击鼠标右键时向listBox添加了一个上下文,但它没有;工作不正常

使用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));
        }
    }
相关文章: