Solo cambie el estado Comprobado de ListViewItem si se hace clic en la casilla de verificación

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

  •  05-07-2019
  •  | 
  •  

Pregunta

De forma predeterminada, al hacer doble clic en un elemento ListView se alterna su estado marcado. Solo quiero que se cambie el estado Comprobado haciendo clic en la casilla de verificación del elemento o presionando la barra espaciadora mientras se resalta un elemento. ¿Es esto fácil de hacer?

¿Fue útil?

Solución

La solución involucra 3 eventos y una variable de estado de 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;
}

La verificación del elemento permite evitar la transición a otro estado de verificación (llamado antes del evento ItemChecked). La solución es simple y segura.

Para descubrirlo, hice una pequeña prueba con diferentes eventos:

Al hacer clic:

  1. MouseDown < ------------- región inhibida
  2. Haga clic
  3. MouseClick
  4. MouseUp ------------- >
  5. ItemCheck ( fuera región inhibida)
  6. ItemChecked

Al hacer doble clic:

  1. MouseDown < ------------- región inhibida
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Haga clic
  5. MouseClick
  6. MouseUp ------------- >
  7. MouseDown < ------------- región inhibida
  8. ItemCheck ( dentro región inhibida)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------- >
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top