C#列表框项目双击事件

我有一些项目的列表框。 无论如何,我可以附加一个双击事件到每个项目?

Item 1 Item 2 Item 3 

如果我要双击项目2,将popup一个消息框“Item 2”

我将如何做到这一点?

 void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) { int index = this.listBox1.IndexFromPoint(e.Location); if (index != System.Windows.Forms.ListBox.NoMatches) { MessageBox.Show(index.ToString()); } } 

这应该工作…检查

的WinForms

ListBoxControl.DoubleClick事件添加事件处理程序,并在该事件处理程序中打开显示所选项目的MessageBox

例如:

  private void ListBox1_DoubleClick(object sender, EventArgs e) { if (ListBox1.SelectedItem != null) { MessageBox.Show(ListBox1.SelectedItem.ToString()); } } 

ListBox1ListBox的名称。

请注意,您可以像这样分配事件处理程序:

 ListBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick); 

WPF
几乎和上面一样,但是您应该使用MouseDoubleClick事件 :

 ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick); 

而事件处理程序:

  private void ListBox1_MouseDoubleClick(object sender, RoutedEventArgs e) { if (ListBox1.SelectedItem != null) { MessageBox.Show(ListBox1.SelectedItem.ToString()); } } 

编辑: Sisya的答案检查双击是否发生在一个项目上,这将需要被合并到这个代码来修复注释中提到的问题(如果在select项目时双击ListBox时显示消息框,但是没有点击一个项目)。

希望这可以帮助!

我知道这个问题是相当古老的,但我也在寻找解决这个问题的方法。 接受的解决scheme是WinForms不是WPF,我想很多来这里的人都在寻找。

对于任何寻找WPF解决scheme的人来说,这是一个很好的方法(通过Oskar的回答):

 private void myListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) { DependencyObject obj = (DependencyObject)e.OriginalSource; while (obj != null && obj != myListBox) { if (obj.GetType() == typeof(ListBoxItem)) { // Do something break; } obj = VisualTreeHelper.GetParent(obj); } } 

基本上,你走了VisualTree,直到你find了一个ListBoxItem的父项,或者你上升到实际的ListBox(因此没有点击一个ListBoxItem)。

对于Winforms

 private void listBox1_DoubleClick(object sender, MouseEventArgs e) { int index = this.listBox1.IndexFromPoint(e.Location); if (index != System.Windows.Forms.ListBox.NoMatches) { MessageBox.Show(listBox1.SelectedItem.ToString()); } } 

 public Form() { InitializeComponent(); listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick); } 

这也应该,如果你select一个项目,然后单击一个空白区域,防止事件触发。

我告诉你使用Visual Studio,

你可以做什么,你想要的是在列表框属性 – >行为 – > AutoPostBack将其更改为“True”。

希望这会有所帮助