问题
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?
回答1:
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 ------------->
来源:https://stackoverflow.com/questions/1406887/only-change-a-listviewitems-checked-state-if-the-checkbox-is-clicked