58

いくつかのアイテムを含むリスト ボックスがあります。とにかく、各アイテムにダブルクリックイベントを添付できますか?

Item 1
Item 2
Item 3

アイテム 2 をダブルクリックすると、「アイテム 2」というメッセージ ボックスが表示されます。

どうすればいいですか?

4

6 に答える 6

127
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());
    }
}

これはうまくいくはずです...確認してください

于 2010-12-15T20:24:12.890 に答える
28

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 が表示されますが、アイテムをクリックしていません)。

お役に立てれば!

于 2010-12-15T20:18:50.910 に答える
16

この質問はかなり古いことは知っていますが、この問題の解決策も探していました。受け入れられている解決策は、ここに来る多くの人が探していると思う 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 を上っていきます。

于 2013-10-29T17:39:38.683 に答える
9

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);
}

また、アイテムを選択してから空白の領域をクリックすると、イベントが発生するのを防ぐ必要があります。

于 2012-05-15T13:40:47.470 に答える