繁体   English   中英

ListBoxes使用具有不同项目的相同上下文菜单,在ListBox Click事件上

[英]ListBoxes using same context menu with different items, On ListBox Click event

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

最好创建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
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM