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的菜单相同)项,我怎样才能做到这一点?欢迎提出建议!!
最好创建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
}
}
}