By default, double-clicking a ListViewItem toggles its Checked state. I only want the Checked state to be changed by clicking an the item's checkbox or pressing the space bar while an item is highlighted. Is this easy to do?
Only change a ListViewItem's Checked state if the checkbox is clicked
Asked Answered
The solution involves 3 events and one state variable of type bool:
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;
}
The item check enables to avoid the transition to another check state (called before the ItemChecked event). The solution is simple and sure.
To find it out I made a small test with different events:
When clicking:
- MouseDown <------------- inhibited region
- Click
- MouseClick
- MouseUp ------------->
- ItemCheck (outside inhibited region)
- ItemChecked
When double clicking:
- MouseDown <------------- inhibited region
- ItemSelectionChanged
- SelectedIndexChanged
- Click
- MouseClick
- MouseUp ------------->
- MouseDown <------------- inhibited region
- ItemCheck (inside inhibited region)
- ItemActivate
- DoubleClick
- MouseDoubleClick
- MouseUp ------------->
© 2022 - 2024 — McMap. All rights reserved.