0

我有 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 的相同菜单)项目,我该如何实现呢?欢迎提出建议!!

4

1 回答 1

1

最好创建 3 个单独的列表框 ContextMenus。这样你就不需要关注 MouseDown。

但是您可以通过在 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
        }
    }
}
于 2013-07-18T10:12:13.583 回答