Substituir o comportamento padrão da chave do espaço no .NET WinForms ListView
Pergunta
Eu gostaria de implementar algum comportamento personalizado de Espaço chave em a Exibição de lista. Basicamente, eu gostaria de alternar o status selecionado do item sob cursor - isso deve ser bastante simples
this.FocusedItem.Selected = !this.FocusedItem.Selected;
Mas, infelizmente, também faz a ação padrão, que é selecionar o item focado. Dessa forma, não consigo 'não selecionar' o item focado. Eu procurei problemas semelhantes e eles sugerem usar VIGUNDAKEKENDOWN Evento, no qual processaria a chave e proibiria o ListView para fazer sua ação padrão. Mas o argumento do evento PreviewKeyDown não possui uma propriedade "tratada", então não posso "comer" essa chave.
Solução
Isso funcionou como você queria:
private void listView1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Space) {
listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected;
e.Handled = e.SuppressKeyPress = true;
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow