如果单击该复选框,则仅更改ListViewItem的Checked状态

时间:2009-09-10 18:18:15

标签: .net listview listviewitem

默认情况下,双击ListViewItem可切换其Checked状态。我只想通过单击项目的复选框或在项目突出显示时按空格键来更改已检查状态。这很容易吗?

1 个答案:

答案 0 :(得分:14)

该解决方案涉及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< -------------禁止区域
  2. 点击
  3. 鼠标点击
  4. MouseUp ------------->
  5. ItemCheck(外部禁止区域)
  6. ItemChecked
  7. 双击时:

    1. MouseDown< -------------禁止区域
    2. ItemSelectionChanged
    3. 的SelectedIndexChanged
    4. 点击
    5. 鼠标点击
    6. MouseUp ------------->
    7. MouseDown< -------------禁止区域
    8. ItemCheck(内部禁止区域)
    9. ItemActivate
    10. 的DoubleClick
    11. MouseDoubleClick
    12. MouseUp ------------->