Modifier uniquement l'état coché d'un ListViewItem si la case est cochée
-
05-07-2019 - |
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?
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:
- MouseDown < ------------- région inhibée
- cliquez sur
- MouseClick
- MouseUp ------------- >
- ItemCheck ( extérieur de la région inhibée)
- ItemChecked
Lorsque vous double-cliquez sur:
- MouseDown < ------------- région inhibée
- ItemSelectionChanged
- SelectedIndexChanged
- cliquez sur
- MouseClick
- MouseUp ------------- >
- MouseDown < ------------- région inhibée
- ItemCheck ( à l'intérieur de la région inhibée)
- ItemActivate
- DoubleClick
- MouseDoubleClick
- MouseUp ------------- >
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow