6

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

4

1 回答 1

16

该解决方案涉及 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. 鼠标向上 ------------->
  5. ItemCheck(禁止区域外)
  6. 已检查项目

双击时:

  1. MouseDown <------------- 禁止区域
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. 点击
  5. 鼠标点击
  6. 鼠标向上 ------------->
  7. MouseDown <------------- 禁止区域
  8. ItemCheck(禁止区域内)
  9. 物品激活
  10. 双击
  11. 鼠标双击
  12. 鼠标向上 ------------->
于 2009-09-10T19:27:48.227 回答