views:

46

answers:

1

Hello, I'd like to implement some custom behavior of Space key in a ListView. Basically I'd like to toggle selected status of the item under cursor - that should be fairly simple

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

but alas, it also does the default action, which is to select the focused item. This way I am unable to 'unselect' the focused item. I've looked for similar problems and they suggest using PreviewKeyDown event, in which I would process the key and disallow the ListView to do its default action. But the PreviewKeyDown event argument has no "handled" property, so I cannot 'eat' this key.

+1  A: 

This worked as you wanted:

private void listView1_KeyDown(object sender, KeyEventArgs e) {
  if (e.KeyData == Keys.Space) {
    listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected;
    e.Handled = e.SuppressKeyPress = true;
  }
}
Hans Passant
this works, thanks. According to MSDN - http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.suppresskeypress.aspx - setting SuppressKeyPress also sets Handled, so only "e.SuppressKeyPress =true" is necessary.
Axarydax