2010-03-31 4 views
1

Je voudrais implémenter un comportement personnalisé de Espace dans un ListView. En fait, je voudrais passer l'état sélectionné de l'élément sous le curseur - qui devrait être assez simpleRemplacer le comportement par défaut de la touche ESPACE dans .net WinForms ListView

this.FocusedItem.Selected = !this.FocusedItem.Selected; 

mais hélas, il fait aussi l'action par défaut, ce qui est pour sélectionner l'élément ciblé. De cette façon, je suis incapable de «désélectionner» l'élément ciblé. J'ai recherché des problèmes semblables et ils suggèrent d'utiliser l'événement PreviewKeyDown, dans lequel je traiterais la clé et empêcherais le ListView de faire son action par défaut. Mais l'argument de l'événement PreviewKeyDown n'a pas de propriété "handles", donc je ne peux pas "manger" cette clé.

Répondre

1

Cela a fonctionné comme vous vouliez:

private void listView1_KeyDown(object sender, KeyEventArgs e) { 
    if (e.KeyData == Keys.Space) { 
    listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected; 
    e.Handled = e.SuppressKeyPress = true; 
    } 
} 
+0

cela fonctionne, merci. Selon MSDN - http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.suppresskeypress.aspx - paramètre SuppressKeyPress définit également Handled, donc seulement "e.SuppressKeyPress = true" est nécessaire. – Axarydax

Questions connexes