C# 将单击事件添加到充满代码中对象的列表框中
我试图右键单击列表框中的某个项目时显示上下文菜单。因此,我将“用户”列表绑定到我的列表框。那我就有点迷路了。我想我可以foreach列表并在listboxitems上添加mouserightdown事件,但我不知道如何添加 这是一个好方法,还是有人知道一个更好的方法来实现我想要的C# 将单击事件添加到充满代码中对象的列表框中,c#,wpf,events,contextmenu,C#,Wpf,Events,Contextmenu,我试图右键单击列表框中的某个项目时显示上下文菜单。因此,我将“用户”列表绑定到我的列表框。那我就有点迷路了。我想我可以foreach列表并在listboxitems上添加mouserightdown事件,但我不知道如何添加 这是一个好方法,还是有人知道一个更好的方法来实现我想要的 提前感谢。也许您可以从列表框中进入Mousdown事件,选择了witch项。 还是在没有选择项目的情况下单击鼠标右键?我这样做已经有一段时间了,但如果我没记错的话: 您应该在鼠标右键按下时触发事件 找出光标当时的位置
提前感谢。也许您可以从列表框中进入Mousdown事件,选择了witch项。
还是在没有选择项目的情况下单击鼠标右键?我这样做已经有一段时间了,但如果我没记错的话:
- 您应该在鼠标右键按下时触发事件
- 找出光标当时的位置
- 询问列表框,哪个项目位于这些坐标处
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != System.Windows.Forms.MouseButtons.Right)
return;
int index = listBox1.IndexFromPoint(e.X, e.Y);
MessageBox.Show(listBox1.Items[index].ToString());
}
显然,您需要添加一些错误检查,如果在该点有一个项目等。这将起作用:
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point p = new Point(e.X, e.Y);
listBox1.SelectedIndex = listBox1.IndexFromPoint(p);
contextMenuStrip1.Show();
}
}
编辑:有点太晚了sry;) 这将回答你的问题,我想:
您可以做两件事来解决您遇到的问题: 1) 如果使用usercontrols填充列表框,则可以向其中添加单击事件
2) 如果在列表框中添加contextmenu,右键单击某个项目将自动打开contextmenu,因此您不必向其中添加单击事件。单击列表框项目时,这些事件不起作用,只有在单击空白区域时。。。我想右键单击列表中的一个项目,并显示一个上下文菜单。嗯,为什么不使用MouseRightButtonDown而不是检查单击了哪个按钮。。。?顺便说一句,我在wpf中工作,它似乎没有IndexFromPoint,因为你没有说你使用wpf。可能有些不同。很好,几乎相同的代码:D,只是我不确定这在WPF中是如何工作的。在XAML中,您必须定义MouseDown或OrMouseDown事件。它非常类似于非WPF代码。它是动态的,不能将事件放入listboxitem或其他任何东西,这取决于项目,因此将其放入XAML将无法工作。只需设置ListBox.ContextMenu属性。看,就是这样,很容易。。。同时,我制作了一个usercontrol,因为我知道您可以向其中添加一个事件,但这正是我需要的,您可以将此作为答案发布,我想接受;)
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point p = new Point(e.X, e.Y);
listBox1.SelectedIndex = listBox1.IndexFromPoint(p);
contextMenuStrip1.Show();
}
}