ListBoxes使用相同的上下文菜单和不同的项目,On ListBox Click事件

本文关键字:项目 On 事件 ListBox Click 菜单 上下文 ListBoxes | 更新日期: 2023-09-27 18:23:48

我有3个列表框,在MouseDown事件中,我希望它们显示相同的上下文菜单,但每次单击不同的列表框时,项目会有所不同。例如:

- contextMenu when clicked on :listBox1 
    *  should show: {Edit,Add Items}
- contextMenu when clicked on :listBox2
    *  should show: {Remove, Add Price}
- contextMenu when clicked on :listBox3
    *  should show: {something, Remove}

以下是我用于listBox1:的代码

    private void MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            listBx_1.SelectedIndex = listBx_1.IndexFromPoint(e.Location);
            if (listBx_1.SelectedIndex != -1)
            {
                listboxContextMenu_Opening();
            }
        }
    }
    private void listboxContextMenu_Opening()
    {
        listboxContextMenu.Items.Clear();
        listboxContextMenu.Items.Add("Edit");
        listboxContextMenu.Items.Add("Add Items");
    }

现在,我希望使用MouseDown事件添加listBox2和listBox3上下文菜单(所有三个listBoxes的菜单相同)项,我怎样才能做到这一点?欢迎提出建议!!

ListBoxes使用相同的上下文菜单和不同的项目,On ListBox Click事件

最好创建3个单独的列表框ContextMenus。这样你就不需要看鼠标了。

但您可以通过在MouseDown上动态编辑他们的ContextMenu来实现这一点。

创建一个包含所有项目的ContextMenu,并在MouseDown中包含以下内容。然后将其所有MouseDown事件分配给MouseDown

private void MouseDown(object sender, MouseEventArgs e)
{
    ListBox l = (ListBox) sender;
    if (e.Button == MouseButtons.Right)
    {
        l.SelectedIndex = l.IndexFromPoint(e.Location);
        if (l.SelectedIndex != -1)
        {
            if (l.Name == "listBox1")
            {
                listboxContextMenu.Items.Clear();
                listboxContextMenu.Items.Add("Edit");
                listboxContextMenu.Items.Add("Add Items");
            }
            else if(l.Name = "listBox2")//etc
        }
    }
}