Изменяйте состояние элемента ListViewItem только в том случае, если установлен флажок

StackOverflow https://stackoverflow.com/questions/1406887

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Решение включает в себя 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). Решение простое и уверенное.

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

При нажатии:

<Ол>
  • MouseDown < ------------- запрещенная область
  • Нажмите
  • MouseClick
  • MouseUp ------------- >
  • ItemCheck ( за пределами запрещенной области)
  • ItemChecked
  • При двойном щелчке.

    <Ол>
  • MouseDown < ------------- запрещенная область
  • ItemSelectionChanged
  • SelectedIndexChanged
  • Нажмите
  • MouseClick
  • MouseUp ------------- >
  • MouseDown < ------------- запрещенная область
  • ItemCheck ( внутри запрещенной области)
  • ItemActivate
  • DoubleClick
  • MouseDoubleClick
  • MouseUp ------------- >
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top