You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms中如何禁用ListView复选框并实现后续勾选逻辑

实现步骤与代码

1. 定义类级变量

在窗体类中添加两个变量,用来控制复选框修改权限和存储双击选中的行:

// 控制是否允许修改复选框状态的开关
private bool _allowCheckboxChange = false;
// 存储当前双击选中的ListView行
private ListViewItem _currentDoubleClickedItem;

2. 修改ItemCheck事件

调整你现有的事件逻辑,只有开关开启时才允许修改复选框:

private void listview1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // 未开启修改权限时,强制保持复选框原状态
    if (!_allowCheckboxChange)
    {
        e.NewValue = e.CurrentValue;
    }
}

3. 处理ListView双击事件

给ListView绑定DoubleClick事件,在事件中记录选中行,并在目标标签页生成按钮:

private void listview1_DoubleClick(object sender, EventArgs e)
{
    // 确保有选中的行
    if (listview1.SelectedItems.Count > 0)
    {
        _currentDoubleClickedItem = listview1.SelectedItems[0];
        
        // 清空标签页旧按钮(避免多次双击生成重复按钮)
        tabPage2.Controls.Clear();
        
        // 创建并配置按钮
        Button checkBtn = new Button();
        checkBtn.Text = "勾选当前行";
        checkBtn.Location = new Point(20, 20);
        // 绑定按钮点击事件
        checkBtn.Click += CheckBtn_Click;
        
        // 将按钮添加到标签页
        tabPage2.Controls.Add(checkBtn);
    }
}

4. 实现按钮点击勾选逻辑

在按钮点击时临时开启修改权限,完成勾选后关闭权限:

private void CheckBtn_Click(object sender, EventArgs e)
{
    if (_currentDoubleClickedItem != null)
    {
        // 开启修改权限
        _allowCheckboxChange = true;
        // 勾选对应行的复选框
        _currentDoubleClickedItem.Checked = true;
        // 关闭修改权限,防止手动修改复选框
        _allowCheckboxChange = false;
    }
}

注意事项

  • 要在设计器中给ListView绑定DoubleClick事件(选中ListView,在属性窗口的事件列表中找到DoubleClick,选择对应的处理方法)。
  • 把代码中的tabPage2替换成你实际使用的标签页名称。
  • 如果需要支持多双击生成多个按钮对应不同行,可以去掉清空标签页控件的代码,给每个按钮添加唯一标识来区分对应行。

内容的提问来源于stack exchange,提问作者Uththara Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:01:24