我有一个带有复选框的表单,如果选中,那么不同表单中的文本将全部为大写。我认为我的问题是我每次都创建一个新实例,只想获取复选框的当前状态。
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;
}
}
}
答案 0 :(得分:0)
不要创建Form4
的新实例:
Form4 frm4 = new Form4();
然后它不是指当前的实例,而是指一些从未向用户显示的新的内存实例。
相反,需要引用构造函数上的实例:
Form4 frm4;
public Form3(Form4 form4Instance)
{
InitializeComponent();
frm4 = form4Instance;
}
在您的应用程序的其他位置,当您创建并显示Form3
时,您需要为现有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
不是对象,它是创建对象的蓝图。如果你创建第二个,它不是同一个对象。它可能是相同的,因为从同一计划建造的两栋房屋是相同的。但他们不是同一所房子。