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
为ListBox
的Control.DoubleClick
事件添加事件处理程序,并在该事件处理程序中打开显示所选项目的MessageBox
。
例如:
private void ListBox1_DoubleClick(object sender, EventArgs e) { if (ListBox1.SelectedItem != null) { MessageBox.Show(ListBox1.SelectedItem.ToString()); } }
ListBox1
是ListBox
的名称。
请注意,您可以像这样分配事件处理程序:
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”。
希望这会有所帮助