Ozz*_*zzy 48 c# events listbox double-click listboxitem
我有一个包含一些项目的列表框.无论如何我可以在每个项目上附加双击事件吗?
Item 1
Item 2
Item 3
Run Code Online (Sandbox Code Playgroud)
如果我要双击第2项,将弹出一个消息框,说"第2项"
我该怎么办?
Dar*_*ght 105
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());
}
}
Run Code Online (Sandbox Code Playgroud)
这应该工作......检查
Don*_*nut 27
的WinForms
Control.DoubleClick为您的事件添加事件处理程序ListBox,并在该事件处理程序中打开MessageBox显示所选项目的事件.
例如:
private void ListBox1_DoubleClick(object sender, EventArgs e)
{
if (ListBox1.SelectedItem != null)
{
MessageBox.Show(ListBox1.SelectedItem.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
ListBox1你的名字在哪里ListBox?
请注意,您将像这样分配事件处理程序:
ListBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);
Run Code Online (Sandbox Code Playgroud)
WPF
几乎与上面相同,但你使用的是MouseDoubleClick事件:
ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick);
Run Code Online (Sandbox Code Playgroud)
和事件处理程序:
private void ListBox1_MouseDoubleClick(object sender, RoutedEventArgs e)
{
if (ListBox1.SelectedItem != null)
{
MessageBox.Show(ListBox1.SelectedItem.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:Sisya的回答检查是否在项目上发生了双击,这需要合并到此代码中以修复注释中提到的问题(如果在选择项目时双击ListBox,则会显示MessageBox,但是没有点击一个项目).
希望这可以帮助!
msn*_*der 14
我知道这个问题很老了,但我也在寻找解决这个问题的方法.接受的解决方案是WinForms而不是WPF,我想很多来这里的人都在寻找.
为寻找一个WPF的解决方案,在这里是一个伟大的方式(通过奥斯卡的答案在这里):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,你走向VisualTree,直到你找到一个ListBoxItem的父项,或者你升到实际的ListBox(因此没有点击ListBoxItem).
小智 9
对于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());
}
}
Run Code Online (Sandbox Code Playgroud)
和
public Form()
{
InitializeComponent();
listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
}
Run Code Online (Sandbox Code Playgroud)
如果你选择一个项目,那么也应该防止事件发生,然后点击一个空白区域.
| 归档时间: |
|
| 查看次数: |
120504 次 |
| 最近记录: |