c# - 从 Form2 中获取 Form1 的复选框值

标签 c# winforms

我浏览过这里和其他一些与此相关的网站,并找到了答案。然而,要么该解决方案不起作用,要么对我来说太晦涩难懂。当我说“不起作用”时,我会解释一下我的意思。

我尝试过两种方法来做到这一点。第一个使用 getset,第二个只需将 control 修饰符设置为 true。

当使用其中任何一个时,Form1 设计器中的值似乎不会更新,因此 Form2 仅读取该值为 false,因为这是默认情况下复选框的值。

Form1中:

    public bool CheckBox
    {
        get { return this.checkBox1.Checked; }
        //set { this.checkBox1.Checked = value; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();

        frm.ShowDialog();
    }

Form2中:

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm = new Form1();

        if (frm.CheckBox == true)
        {
            //Do whatever
        }
    }

这基本上就是我想做的事情。如果我做错了什么,或者有更好的方法,请告诉我。

谢谢。

最佳答案

您正在 Form2 中创建一个新的 Form 实例。它与当前的 Form1 实例完全不同。

相反,您可以将当前的 Form1 实例传递给 ShowDialog 方法,如下所示:

 frm.ShowDialog(this);

通过这样做,您将设置 OwnerForm2 的属性添加到您的 Form1 实例。因此,您可以使用 Form2 中的 Owner 属性访问当前实例。此外,您还应该将其转换为 Form1 以访问 CheckBox 属性。

private void button1_Click(object sender, EventArgs e)
{

    if (((Form1)Owner).CheckBox == true)
    {
        //Do whatever
    }
}

关于c# - 从 Form2 中获取 Form1 的复选框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616808/

相关文章:

c# - 键入单个数字时,DateTimePicker 值不会更新 onLeave

c# - 将所选行从 ListView 显示到文本框?

c# - 仅使 ListBox 中的单个项目无效

c# - 一个 sql 连接的几个查询

c# 移动 Winamp 主窗口

c# - 在 sitecore 中将数据从一个子布局发送到另一个子布局

.net - 如何判断拖放在Winforms中是否结束?

c# - Windows C# CheckedListBox 选中项事件处理

c# - 通过创建更多文件写入文件(而不是替换/覆盖)

c# - ClickOnceInstall CefSharp Winforms 问题