2

イベント ハンドラーが割り当てられた を含むアプリWinFormがあります。理論的には、アイテムのみが「クリック可能」であるため、アイテムが選択されていない状態でイベント ハンドラーに入ることは不可能であり、99% の場合はそうです。ただし、ハンドラーが にアクセスしようとすると、ときどきの例外をキャッチし、実際には空であることがわかります。ListViewDoubleClickInvalidAgrumentlist_view.SelectedItems[0]

再現しようとすると、積極的なクリック セッションが必要になります。しかし、それは完了しました。有効なエンティティの真ん中にカーソルが表示されることがあります。これは、競合状態である可能性があると思われます。

4

1 に答える 1

2

これは確かにうまくいかない可能性があります.ダブルクリックはアイテムが選択されていることを保証しません. また、アイテムの選択を解除することもあり、コードがクラッシュします。SelectedItems が空でないことを確認するためのテストを追加するだけでなく、ダブルクリックされた正確なアイテムを見つけることでマウス トラップを改善できます。代わりに MouseDoubleClick イベントを使用してマウスの位置を取得してから、ListView.HitTest() メソッドを使用します。このような:

    private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) {
        var item = ((ListView)sender).HitTest(e.Location);
        if (item != null) {
            // etc..
        }
    }
于 2013-10-16T13:29:54.037 に答える