[英]C# Listbox Item Double Click Event
我有一個包含一些項目的列表框。 無論如何我可以為每個項目附加一個雙擊事件嗎?
Item 1
Item 2
Item 3
如果我要雙擊第 2 項,會彈出一個顯示“第 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());
}
}
這應該有效...檢查
窗體
為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 的回答檢查是否雙擊發生在項目上,這需要合並到此代碼中以解決評論中提到的問題(如果在選擇項目時雙擊 ListBox,則顯示消息框,但是未點擊項目)。
希望這有幫助!
我知道這個問題已經很老了,但我也在尋找這個問題的解決方案。 公認的解決方案是針對WinForms而不是 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());
}
}
和
public Form()
{
InitializeComponent();
listBox1.MouseDoubleClick += new MouseEventHandler(listBox1_DoubleClick);
}
如果您選擇一個項目然后單擊空白區域,也應該防止事件觸發。
這取決於您是否具有System.Windows.Forms.ListBox
類的 ListBox 對象,該類確實具有ListBox.IndexFromPoint()
方法。 但是,如果 ListBox 對象來自System.Windows.Control.Listbox
類,則來自 @dark-knight(標記為正確答案)的答案不起作用。
我正在運行 Win 10 (1903) 和當前版本的 .NET 框架 (4.8)。 不過,此問題不應與版本有關,僅取決於您的應用程序是否使用 WPF 或 Windows 窗體作為 UI。 另請參閱: WPF 與 Windows 窗體
這是一篇很老的帖子,但如果有人遇到類似的問題並需要快速回答:
listBox1.IndexFromPoint(new Point(eX,eY))>=0
e.Clicks == 2
該帖子很舊,但對於需要它的人有一個簡單的解決方案
private void listBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
MessageBox.Show(listBox1.Items[listBox1.SelectedIndex].ToString());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.