comportamento predefinito Override del tasto SPACE in WinForms .net ListView
Domanda
mi piacerebbe implementare alcune comportamento personalizzato del tasto Spazio in ListView . Fondamentalmente vorrei alternare lo stato selezionato della voce sotto il cursore - che dovrebbe essere abbastanza semplice
this.FocusedItem.Selected = !this.FocusedItem.Selected;
, ma, ahimè, lo fa anche l'azione predefinita, che è per selezionare l'elemento focalizzato. In questo modo non sono in grado alla voce focalizzato 'deselezionare'. Ho guardato per problemi simili e loro suggerisco di usare PreviewKeyDown evento, in cui vorrei trattare la chiave e non consentire la ListView a fare la sua azione predefinita. Ma l'argomento dell'evento PreviewKeyDown non ha proprietà "maneggiato", quindi non posso 'mangiare' questa chiave.
Soluzione
Questo ha funzionato come si voleva:
private void listView1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Space) {
listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected;
e.Handled = e.SuppressKeyPress = true;
}
}