将单击事件添加到填充了代码中的对象的列表框中

时间:2010-05-03 11:56:06

标签: c# wpf events contextmenu

我正试图在右键单击列表框中的项目时显示上下文菜单。所以我将“用户”列表绑定到我的列表框中。然后我有点迷茫。我以为我可以预先查看列表并在listboxitems上添加一个mouserightdown事件,但我无法弄清楚如何。

这是一个好方法,还是有人知道一种更好的方式来实现我想要的东西。

提前致谢。

6 个答案:

答案 0 :(得分:1)

这将有效:

        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 :(得分:1)

您可以做两件事来解决您遇到的问题:

1)如果您使用usercontrols填充列表框,则可以向其添加点击事件。

2)如果您将一个上下文菜单添加到列表框中,右键单击一个项目将自动打开上下文菜单,因此您不必向其添加单击事件。

答案 2 :(得分:0)

也许你可以从列表框进入Mousedown事件,选择该项目。 或者在没有选择项目的情况下右键单击?

答案 3 :(得分:0)

自从我这样做了一段时间,但如果我没记错的话:

  • 您应该通过鼠标右键来触发事件
  • 弄清楚当时光标的位置
  • 询问列表框,哪个项目位于这些坐标处。

列表框确实有我认为的方法......

编辑: 在这里,有一些代码:

    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());

    }

显然,如果此时有一个项目等,你需要添加一些错误检查。

答案 4 :(得分:0)

答案 5 :(得分:-1)

 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();
    }
}