Anular el comportamiento por defecto de espacio clave en .NET Windows Forms ListView
Pregunta
Me gustaría poner en práctica algunas comportamiento personalizado de Espacio tecla en un ListView . Básicamente me gustaría cambiar el estado seleccionado del elemento bajo el cursor - que debería ser bastante simple
this.FocusedItem.Selected = !this.FocusedItem.Selected;
Pero, por desgracia, también lo hace la acción por defecto, que es para seleccionar del elemento destacado. De esta manera no puedo elemento destacado 'desactiva'. He buscado problemas similares y sugieren el uso de PreviewKeyDown evento, en el que me gustaría procesar la llave y no permitir el ListView para realizar su acción predeterminada. Pero el argumento de evento PreviewKeyDown tiene ninguna propiedad "manejado", así que no puedo 'comer' esta clave.
Solución
Esto funcionó como lo hubiera querido:
private void listView1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Space) {
listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected;
e.Handled = e.SuppressKeyPress = true;
}
}