Frage

In der Standardeinstellung einen Doppelklick auf ein ListViewItem schaltet seinen Zustand überprüft. Ich möchte nur das aufgegebene Zustand durch Anklicken eines die Sache des Kontrollkästchen oder durch Drücken der Leertaste, während ein Element markiert ist geändert werden. Ist das einfach zu tun?

War es hilfreich?

Lösung

Die Lösung beinhaltet drei Ereignisse und eine Zustandsvariable vom Typ 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;
}

Der Artikel Prüfung ermöglicht den Übergang zu einem anderen Prüfungszustand (genannt vor dem ItemChecked Ereignisse) zu vermeiden. Die Lösung ist einfach und sicher.

Um es herauszufinden, ich einen kleinen Test mit verschiedenen Veranstaltungen gemacht:

Beim Anklicken:

  1. MouseDown- <------------- hemmte Region
  2. Klicken Sie auf
  3. Mouseclick
  4. MouseUp ------------->
  5. ItemCheck ( außerhalb gehemmt Region)
  6. ItemChecked

Bei einem Doppelklick:

  1. MouseDown- <------------- hemmte Region
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Klicken Sie auf
  5. Mouseclick
  6. MouseUp ------------->
  7. MouseDown- <------------- hemmte Region
  8. ItemCheck ( innerhalb hemmte Region)
  9. ItemActivate
  10. Doubleclick
  11. Mousedoubleclick
  12. MouseUp ------------->
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top