3

よく私は中にいくつかのアイテムが入ったリストボックスを持っています。
アイテムのダブルクリックを検出したい。
現在私が使用している方法には、ユーザーが空の場所をダブルクリックすると、現在選択されているアイテムがダブルクリックとして通知されるという問題があります。

更新:
この質問は最初に思われるほど簡単ではないことに注意してください。
また、[if(ListBox1.SelectedIndex == -1)]の部分は、選択されたアイテムがあり、空のスペースをクリックした場合は実行されないため、Timwiの回答は正しくないことに注意してください。誰が彼に賛成したかはわかりませんが、彼の回答は正しくありません。正しい。 マウス座標をリストボックスアイテムに変換できる関数がある場合
、コードのこの部分はすでに記述されています。問題は修正されます。

4

2 に答える 2

15

別のイベントがあります: MouseDoubleClickMouseEventArgs を提供するため、クリック座標を取得できます。次にGetItemBounds()、選択したアイテムを含む四角形を取得するために呼び出し、マウス座標がこの四角形内にあるかどうかを確認できます。

    private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if(listBox1.SelectedIndex != -1)
        {
            var rect = listBox1.GetItemRectangle(listBox1.SelectedIndex);
            if(rect.Contains(e.Location))
            {
                // process item data here
            }
        }
    }

MouseDoubleClickバージョン情報:

  • .NET Framework - サポート対象: 4、3.5、3.0、2.0
  • .NET Framework クライアント プロファイル - サポート対象: 4、3.5 SP1
于 2010-08-23T01:46:34.523 に答える
1

これは、単一の MouseClick に使用したもので、適応される可能性があります。

まず、CheckListBox.CheckOnClick のプロパティを true に設定します。clb.CheckOnClick = true;

次に、ボックスのチェック状態が変更された後、アイテムの選択を強制的に解除しました。

void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (clb.Items.Count > 0) { clb.SetSelected(0, false); }
    }
于 2014-03-17T18:55:19.810 に答える