Apenas alterar o estado verificado um ListViewItem se a opção é clicado
-
05-07-2019 - |
Pergunta
Por padrão, clicando duas vezes um ListViewItem alterna seu estado verificado. Eu só quero o estado verificado que ser mudado clicando em uma caixa de seleção do item ou pressionar a barra de espaço quando um item é realçado. É este fácil de fazer?
Solução
A solução envolve 3 eventos e uma variável de estado do tipo bool:
private bool inhibitAutoCheck;
private void listView1_MouseDown(object sender, MouseEventArgs e) {
inhibitAutoCheck = true;
}
private void listView1_MouseUp(object sender, MouseEventArgs e) {
inhibitAutoCheck = false;
}
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
if (inhibitAutoCheck)
e.NewValue = e.CurrentValue;
}
A seleção do item permite evitar a transição para outro estado de seleção (chamado antes do evento ItemChecked). A solução é simples e seguro.
Para encontrá-lo para fora Eu fiz um pequeno teste com diferentes eventos:
Ao clicar:
- MouseDown <------------- região inibido
- Clique em
- MouseClick
- MouseUp ------------->
- ItemCheck (
fora região inibido) - ItemChecked
clicando Quando dupla:
- MouseDown <------------- região inibido
- ItemSelectionChanged
- SelectedIndexChanged
- Clique em
- MouseClick
- MouseUp ------------->
- MouseDown <------------- região inibido
- ItemCheck (
dentro região inibido) - ItemActivate
- DoubleClick
- MouseDoubleClick
- MouseUp ------------->
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow