チェックボックスがクリックされた場合にのみ、ListViewItemのチェック状態を変更します
-
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イベントの前に呼び出される)への移行を回避できます。解決策はシンプルで確実です。
それを見つけるために、さまざまなイベントで小さなテストを行いました:
クリック時:
- MouseDown <!> lt; -------------禁止領域
- クリック
- マウスクリック
- MouseUp ------------- <!> gt;
- ItemCheck(外部禁止地域)
- ItemChecked
ダブルクリックした場合:
- MouseDown <!> lt; -------------禁止領域
- ItemSelectionChanged
- SelectedIndexChanged
- クリック
- マウスクリック
- MouseUp ------------- <!> gt;
- MouseDown <!> lt; -------------禁止領域
- ItemCheck( inside 禁止地域)
- ItemActivate
- DoubleClick
- MouseDoubleClick
- MouseUp ------------- <!> gt;
所属していません StackOverflow