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

如何在C#两个窗体之间传递CheckBox复选框的选中值

问题原因
  • 检测逻辑写在Form1构造函数中,构造函数仅在窗体初始化时执行1次,无法响应后续Form2的用户操作
  • Form2构造函数定义错误,构造函数无返回值,不能直接return复选框状态
  • 直接跨窗体访问控件成员不符合封装规范,也容易出现空引用异常
实现方案(最简单的DialogResult+公共属性方式)

第一步:修改Form2代码

编辑Form2的逻辑,定义公共属性存储复选框状态,绑定确认按钮的点击事件:

public partial class Form2 : Form
{
    // 公共属性,对外暴露复选框的选中状态
    public bool IsCheckboxChecked { get; private set; }

    public Form2()
    {
        InitializeComponent();
    }

    // 确认按钮的点击事件,在设计界面双击确认按钮会自动生成该方法
    private void confirmButton_Click(object sender, EventArgs e)
    {
        // 给属性赋值
        IsCheckboxChecked = checkbox1.Checked;
        // 设置对话框返回结果为OK,同时自动关闭Form2
        this.DialogResult = DialogResult.OK;
    }
}

第二步:修改Form1代码

在Form1中需要打开Form2的位置(比如某个按钮的点击事件中)编写逻辑,不要写在构造函数里:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    // 比如点击Form1上的某个按钮弹出Form2,就把逻辑写在这个按钮的点击事件里
    private void openForm2Button_Click(object sender, EventArgs e)
    {
        using (Form2 form2 = new Form2())
        {
            // 弹出Form2,等待用户操作完成
            if (form2.ShowDialog() == DialogResult.OK)
            {
                // 读取Form2暴露的属性,判断复选框状态
                if (form2.IsCheckboxChecked)
                {
                    MessageBox.Show("You check the checkbox");
                }
            }
        }
    }
}
补充说明
  • 如果不需要模态弹窗(打开Form2的时候还能操作Form1),可以改用事件订阅的方式实现通知,新手可以先掌握上面的方法后再深入了解
  • 不要直接跨窗体访问控件,通过公共属性/方法/事件传递数据是规范写法

内容的提问来源于stack exchange,提问作者Jason Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:21:03