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.

Foi útil?

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
scroll top