2013-07-18 29 views
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上下文菜单(所有三个列表框相同的菜单)项目 ,我怎么能做到这一点?建议欢迎!

+0

为什么他们都需要是相同的菜单?你显然有三个不同的菜单,所以给每个ListBox自己的自定义菜单是有道理的。 –

+0

好吧,让我们考虑我现在有三个不同的contextMenu,如果我想要相同的MouseDown事件(定义如上)在三个不同的列表框点击调用。那么应该如何在MouseDown事件中更改我的代码? – Sadiq

+0

您只需创建三个单独的MouseDown事件处理程序,并为每个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 
     } 
    } 
} 
相关问题