Question

Par défaut, un double-clic sur un ListViewItem fait basculer son état Checked. Je souhaite seulement que l'état Checked soit modifié en cochant la case d'un élément ou en appuyant sur la barre d'espace lorsqu'un élément est en surbrillance. Est-ce facile à faire?

Était-ce utile?

La solution

La solution implique 3 événements et une variable d'état de type 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;
}

La vérification d'élément permet d'éviter le passage à un autre état de contrôle (appelé avant l'événement ItemChecked). La solution est simple et sûre.

Pour le savoir, j'ai fait un petit test avec différents événements:

Lorsque vous cliquez sur:

  1. MouseDown < ------------- région inhibée
  2. cliquez sur
  3. MouseClick
  4. MouseUp ------------- >
  5. ItemCheck ( extérieur de la région inhibée)
  6. ItemChecked

Lorsque vous double-cliquez sur:

  1. MouseDown < ------------- région inhibée
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. cliquez sur
  5. MouseClick
  6. MouseUp ------------- >
  7. MouseDown < ------------- région inhibée
  8. ItemCheck ( à l'intérieur de la région inhibée)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------- >
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top