Переопределить поведение по умолчанию клавиши SPACE в .net WinForms ListView - PullRequest
1 голос
/ 31 марта 2010

Я хотел бы реализовать некоторое пользовательское поведение клавиши Пробел в ListView . По сути, я хотел бы переключать выбранный статус элемента под курсором - это должно быть довольно просто

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

но, увы, он также выполняет действие по умолчанию, которое для выбора сфокусированного элемента. Таким образом, я не могу отменить выделение предмета. Я искал похожие проблемы, и они предлагают использовать событие PreviewKeyDown , в котором я обработал бы ключ и запретил бы ListView выполнять его действие по умолчанию. Но аргумент события PreviewKeyDown не имеет свойства handled, поэтому я не могу «съесть» этот ключ.

1 Ответ

1 голос
/ 31 марта 2010

Это сработало, как вы хотели:

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