いくつかのアイテムを含むリストボックスがあります。とにかく、各アイテムにダブルクリックイベントを添付できますか?
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());
}
}
これは動作するはずです...チェック
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
event を使用します。
ListBox1.MouseDoubleClick += new RoutedEventHandler(ListBox1_MouseDoubleClick);
そして、イベントハンドラー:
private void ListBox1_MouseDoubleClick(object sender, RoutedEventArgs e)
{
if (ListBox1.SelectedItem != null)
{
MessageBox.Show(ListBox1.SelectedItem.ToString());
}
}
編集: Sisya's answer アイテムでダブルクリックが発生したかどうかを確認します。これは、コメントに記載されている問題を修正するためにこのコードに組み込む必要があります(ListBoxをダブルクリックすると、MessageBoxが表示されますアイテムが選択されているが、アイテムをクリックしていない場合)。
お役に立てれば!
この質問はかなり古いものですが、この問題の解決策も探していました。受け入れられる解決策は、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);
}
}
基本的に、ListBoxItemである親アイテムが見つかるまで、または実際のListBoxに到達するまで(したがって、ListBoxItemをクリックしなかったまで)VisualTreeを上っていきます。
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);
}
また、アイテムを選択して空白の領域をクリックすると、イベントの発生を防ぐ必要があります。
ListBox.IndexFromPoint()
メソッドを持つSystem.Windows.Forms.ListBox
クラスのListBoxオブジェクトかどうかによって異なります。しかし、ListBoxオブジェクトがSystem.Windows.Control.Listbox
クラスからのものである場合、@ dark-knightからの回答(正解としてマークされている)は機能しません。
Win 10(1903)および.NET framework(4.8)の現在のバージョンを実行しています。ただし、アプリケーションがUIにWPFを使用しているかWindowsフォームを使用しているかにかかわらず、この問題はバージョンに依存するべきではありません。参照: WPF vs Windows Form
これは非常に古い投稿ですが、誰かが同様の問題にぶつかり、迅速な回答が必要な場合:
listBox1.IndexFromPoint(new Point(e.X,e.Y))>=0
e.Clicks == 2