【问题标题】:ListBoxes using same context menu with different items, On ListBox Click eventListBoxes 使用具有不同项目的相同上下文菜单,在 ListBox Click 事件上
【发布时间】:2013-07-17 05:00:24
【问题描述】:

我有 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 的相同菜单)项目 ,我怎么能做到这一点?欢迎提出建议!

【问题讨论】:

  • 为什么它们都需要是同一个菜单?您显然拥有三个不同的菜单,因此为每个 ListBox 提供自己的自定义菜单是有意义的。
  • 好吧,如果我想在三个不同的列表框单击上调用相同的 MouseDown 事件(如上定义),那么让我们考虑一下我现在为它们提供了三个不同的 contextMenu。那么应该如何在 MouseDown 事件中更改我的代码??
  • 您只需创建三个单独的 MouseDown 事件处理程序并为每个 ListBox 分配一个

标签: c# listbox


【解决方案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
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多