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.

È stato utile?

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;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top