Modificare lo stato Controllato di ListViewItem solo se si fa clic sulla casella di controllo

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

  •  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?

È stato utile?

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:

  1. MouseDown < ------------- regione inibita
  2. Fare clic su
  3. MouseClick
  4. MouseUp ------------- >
  5. ItemCheck ( fuori regione inibita)
  6. ItemChecked

Quando si fa doppio clic:

  1. MouseDown < ------------- regione inibita
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Fare clic su
  5. MouseClick
  6. MouseUp ------------- >
  7. MouseDown < ------------- regione inibita
  8. ItemCheck ( all'interno regione inibita)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------- >
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top