Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将设置从一个Windows窗体传递到另一个窗体_C#_Visual Studio_Windows Forms Designer - Fatal编程技术网

C# 将设置从一个Windows窗体传递到另一个窗体

C# 将设置从一个Windows窗体传递到另一个窗体,c#,visual-studio,windows-forms-designer,C#,Visual Studio,Windows Forms Designer,我有一个带有复选框的表单,如果选中,则不同表单中的文本将全部为大写。我想我的问题是,我每次都创建一个新实例,只想获取复选框的当前状态 public partial class Form4 : Form { public bool bChecked = false; public Form4() { InitializeComponent(); } private void Form4_FormClosed(object sender,

我有一个带有复选框的表单,如果选中,则不同表单中的文本将全部为大写。我想我的问题是,我每次都创建一个新实例,只想获取复选框的当前状态

 public partial class Form4 : Form
{
    public bool bChecked = false;

    public Form4()
    {
        InitializeComponent();
    }

    private void Form4_FormClosed(object sender, FormClosedEventArgs e)
    {
        Properties.Settings.Default.checkbox = checkBox1.Checked;
        Properties.Settings.Default.Save();
    }

    private void Form4_Load(object sender, EventArgs e)
    {
        checkBox1.Checked = Properties.Settings.Default.checkbox;
    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if(checkBox1.Checked)
        {
            bChecked = true;
        }
    }
}

public partial class Form3 : Form
{
    Form4 frm4 = new Form4();
    public Form3()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if(frm4.bChecked.Equals(true))
        {
            textBox1.CharacterCasing = CharacterCasing.Upper;
        }

    }


}

不要创建
表单4
的新实例:

Form4 frm4 = new Form4();
Form3 frm3 = new Form4(someReferenceToForm4);
frm3.Show();
然后它不是指当前实例,而是指一些新的内存中的实例,这些实例从未向用户显示过

相反,需要引用构造函数上的实例:

Form4 frm4;

public Form3(Form4 form4Instance)
{
    InitializeComponent();
    frm4 = form4Instance;
}
在应用程序的其他地方,当您创建并显示
Form3
时,需要为其提供现有
Form4
的参考:

Form4 frm4 = new Form4();
Form3 frm3 = new Form4(someReferenceToForm4);
frm3.Show();
有几个方向,你可以采取这个。例如,如果
Form3
不需要引用
Form4
,但有时可以使用一个,则提供两个构造函数:

public Form3()
{
    InitializeComponent();
}

public Form3(Form4 form4Instance)
{
    InitializeComponent();
    frm4 = form4Instance;
}
并在使用前执行
null
检查:

if (frm4 != null)
    if (frm4.bChecked.Equals(true))
        textBox1.CharacterCasing = CharacterCasing.Upper;

但关键是,您需要一个对实际已存在对象的引用
Form4
不是对象,而是创建对象的蓝图。如果创建第二个对象,则它不是同一个对象。这可能是相同的方式,从相同的计划建造的两所房子是相同的。但他们不是同一所房子。

我编辑了你的标题。请看“,”其中的共识是“不,他们不应该”。关于如何做到这一点,这里有数百个问题。是的,您不需要创建新表单。那是行不通的。在构造函数上或通过方法传递现有的。