いくつかのアイテムを含むリスト ボックスがあります。とにかく、各アイテムにダブルクリックイベントを添付できますか?
Item 1
Item 2
Item 3
アイテム 2 をダブルクリックすると、「アイテム 2」というメッセージ ボックスが表示されます。
どうすればいいですか?
いくつかのアイテムを含むリスト ボックスがあります。とにかく、各アイテムにダブルクリックイベントを添付できますか?
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());
}
}
これはうまくいくはずです...確認してください
Winフォーム
Control.DoubleClick
のイベントのイベント ハンドラーを追加し、そのイベント ハンドラーで、選択したアイテムを表示する をListBox
開きます。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 がダブルクリックされた場合、MessageBox が表示されますが、アイテムをクリックしていません)。
お役に立てれば!
この質問はかなり古いことは知っていますが、この問題の解決策も探していました。受け入れられている解決策は、ここに来る多くの人が探していると思う WPF ではなくWinFormsです。
WPFソリューションを探している人にとって、ここに素晴らしいアプローチがあります (Oskar の回答hereを介して):
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 を上っていきます。
Winform の場合
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);
}
また、アイテムを選択してから空白の領域をクリックすると、イベントが発生するのを防ぐ必要があります。