Modificare lo stato Controllato di ListViewItem solo se si fa clic sulla casella di controllo
-
05-07-2019 - |
Domanda
Per impostazione predefinita, facendo doppio clic su un oggetto ListViewItem si attiva lo stato Controllato. Voglio solo cambiare lo stato Controllato facendo clic sulla casella di controllo di un elemento o premendo la barra spaziatrice mentre un elemento è evidenziato. È facile da fare?
Soluzione
La soluzione prevede 3 eventi e una variabile di stato di tipo 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;
}
Il controllo articolo consente di evitare il passaggio a un altro stato di controllo (chiamato prima dell'evento ItemChecked). La soluzione è semplice e sicura.
Per scoprirlo ho fatto un piccolo test con diversi eventi:
Quando si fa clic:
- MouseDown < ------------- regione inibita
- Fare clic su
- MouseClick
- MouseUp ------------- >
- ItemCheck ( fuori regione inibita)
- ItemChecked
Quando si fa doppio clic:
- MouseDown < ------------- regione inibita
- ItemSelectionChanged
- SelectedIndexChanged
- Fare clic su
- MouseClick
- MouseUp ------------- >
- MouseDown < ------------- regione inibita
- ItemCheck ( all'interno regione inibita)
- ItemActivate
- DoubleClick
- MouseDoubleClick
- MouseUp ------------- >
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow