Изменяйте состояние элемента ListViewItem только в том случае, если установлен флажок - PullRequest
4 голосов
/ 10 сентября 2009

По умолчанию двойной щелчок по ListViewItem переключает его состояние Checked. Я хочу, чтобы состояние «Проверено» можно было изменить, установив флажок элемента или нажав клавишу пробела, когда элемент выделен. Это легко сделать?

1 Ответ

14 голосов
/ 10 сентября 2009

Решение включает в себя 3 события и одну переменную состояния типа 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;
}

Проверка элемента позволяет избежать перехода в другое состояние проверки (вызывается до события ItemChecked). Решение простое и уверенное.

Чтобы выяснить это, я провел небольшой тест с различными событиями:

При нажатии:

  1. MouseDown <------------- запрещенная область </li>
  2. Нажмите
  3. MouseClick
  4. MouseUp ------------->
  5. ItemCheck ( за пределами запрещенная область)
  6. ItemChecked

При двойном нажатии:

  1. MouseDown <------------- запрещенная область </li>
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Нажмите
  5. MouseClick
  6. MouseUp ------------->
  7. MouseDown <------------- запрещенная область </li>
  8. ItemCheck ( внутри запрещенная область)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------->
...