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

Cat*_*ann 4 .net listview listviewitem

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

jde*_*aan 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;
}
Run Code Online (Sandbox Code Playgroud)

项检查可以避免转换到另一个检查状态(在ItemChecked事件之前调用).解决方案简单而且确定.

为了找到它我用不同的事件做了一个小测试:

点击时:

  1. MouseDown <-------------禁止区域
  2. 点击
  3. 鼠标点击
  4. MouseUp ------------->
  5. ItemCheck(外部禁止区域)
  6. ItemChecked

双击时:

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