チェックボックスがクリックされた場合にのみ、ListViewItemのチェック状態を変更します

StackOverflow https://stackoverflow.com/questions/1406887

  •  05-07-2019
  •  | 
  •  

質問

デフォルトでは、ListViewItemをダブルクリックすると、そのChecked状態が切り替わります。項目のチェックボックスをクリックするか、項目が強調表示されている間にスペースバーを押すことによって、Checked状態を変更したいだけです。これは簡単ですか?

役に立ちましたか?

解決

ソリューションには、3つのイベントとbool型の1つの状態変数が含まれます。

private bool inhibitAutoCheck;

private void listView1_MouseDown(object sender, MouseEventArgs e) {
    inhibitAutoCheck = true;
}

private void listView1_MouseUp(object sender, MouseEventArgs e) {
    inhibitAutoCheck = false;
}

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
    if (inhibitAutoCheck)
        e.NewValue = e.CurrentValue;
}

アイテムチェックにより、別のチェック状態(ItemCheckedイベントの前に呼び出される)への移行を回避できます。解決策はシンプルで確実です。

それを見つけるために、さまざまなイベントで小さなテストを行いました:

クリック時:

  1. MouseDown <!> lt; -------------禁止領域
  2. クリック
  3. マウスクリック
  4. MouseUp ------------- <!> gt;
  5. ItemCheck(外部禁止地域)
  6. ItemChecked

ダブルクリックした場合:

  1. MouseDown <!> lt; -------------禁止領域
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. クリック
  5. マウスクリック
  6. MouseUp ------------- <!> gt;
  7. MouseDown <!> lt; -------------禁止領域
  8. ItemCheck( inside 禁止地域)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------- <!> gt;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top