我有一个列表框,其中包含一些项目。有没有办法为每个项目附加双击事件?
Item 1
Item 2
Item 3
如果我双击Item 2,那么会弹出一个显示"Item 2"的MessageBox。如何实现这个功能?我有一个列表框,其中包含一些项目。有没有办法为每个项目附加双击事件?
Item 1
Item 2
Item 3
如果我双击Item 2,那么会弹出一个显示"Item 2"的MessageBox。如何实现这个功能?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
,显示所选项目。
E.g.:
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());
}
}
我知道这个问题很老了,但我也在寻找解决这个问题的方法。 接受的解决方案是针对 WinForms 而不是 WPF,我认为许多来到这里的人都在寻找 WPF 的解决方案。
对于任何寻找 WPF 解决方案的人,这里有一个很好的方法(来自 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 向上走,直到找到一个父项是 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());
}
}
and
public Form()
{
InitializeComponent();
listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
}
如果您选择一个项目,然后单击空白区域,这也应该防止事件触发。
System.Windows.Forms.ListBox
类的 ListBox 对象,该类具有 ListBox.IndexFromPoint()
方法。但如果 ListBox 对象来自 System.Windows.Control.Listbox
类,则 @dark-knight 的答案(标记为正确答案)不起作用。这是一篇很旧的文章,但如果有人遇到类似问题并需要快速答案:
listBox1.IndexFromPoint(new Point(e.X,e.Y))>=0
e.Clicks == 2
这篇文章可能有点老了,但对于那些需要它的人来说,有一个简单的解决方案。
private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
MessageBox.Show(listBox1.Items[listBox1.SelectedIndex].ToString());
}
}
SelectedItem
? - JackSelectedItem
可能不为null
。 - HaoshuIndexFromPoint
是什么? - PreguntonCojoneroCabrón