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
不是对象,而是创建对象的蓝图。如果创建第二个对象,则它不是同一个对象。这可能是相同的方式,从相同的计划建造的两所房子是相同的。但他们不是同一所房子。我编辑了你的标题。请看“,”其中的共识是“不,他们不应该”。关于如何做到这一点,这里有数百个问题。是的,您不需要创建新表单。那是行不通的。在构造函数上或通过方法传递现有的。