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?

Foi útil?

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:

  1. MouseDown <------------- região inibido
  2. Clique em
  3. MouseClick
  4. MouseUp ------------->
  5. ItemCheck ( fora região inibido)
  6. ItemChecked

clicando Quando dupla:

  1. MouseDown <------------- região inibido
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Clique em
  5. MouseClick
  6. MouseUp ------------->
  7. MouseDown <------------- região inibido
  8. ItemCheck ( dentro região inibido)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------->
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top