【问题标题】:Only change a ListViewItem's Checked state if the checkbox is clicked仅在单击复选框时更改 ListViewItem 的 Checked 状态
【发布时间】:2009-09-10 18:18:14
【问题描述】:

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

【问题讨论】:

    标签: .net listview listviewitem


    【解决方案1】:

    解决方案涉及 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

    双击时:

    1. MouseDown
    2. ItemSelectionChanged
    3. SelectedIndex 已更改
    4. 点击
    5. 鼠标点击
    6. MouseUp ------------->
    7. MouseDown
    8. ItemCheck(内部禁止区域)
    9. 物品激活
    10. 双击
    11. 鼠标双击
    12. MouseUp ------------->

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多