我有2个表格。一个是主窗体(form1),当我按下按钮时调用另一个(form2)。
当我按下一个按钮时,form2显示它包含几个复选框和组合框。
我的问题是,我如何存储或保存复选框状态和组合框选择,以便在关闭form2后我可以在form1中使用它们(检查它们的状态/选择)?
这是一个基本的例子:
Form2:
--I click on checkbox and the state changes:
checkbox1.Checked = true;
Form1:
private void button1_Click(object sender, EventArgs e)
{
if (checkbox1.Checked == true)
{
MessageBox.Show("Checkbox on form2 is checked")
}
}
提前致谢!
答案 0 :(得分:1)
使用数据绑定和对象传递。以下示例演示了如何实现此目的,而无需进行任何静态操作。因为如果您执行以下操作将绑定在一起:state.IsChecked = false;这也将取消选中Form2上的复选框。
不要只是添加全局变量,等待发生这种痛苦。
class Form1: Form
{
private State state = new State();
public Form1()
{
Load += HandleLoad;
}
public HandleLoad(object sender, EventArgs e)
{
label1.DataBindings.Add("Text", state, "IsChecked"); // or just query state.IsChecked
}
public void someEvent_Handler()
{
Form2 form2 = new Form2();
form2.Bind(state);
form2.Show();
}
}
class Form2: Form
{
public void Bind(State state)
{
checkBox1.DataBindings.Add("Checked", state, "IsChecked");
}
}
class State
{
public bool IsChecked {get;set;}
}
答案 1 :(得分:0)
在您当前的代码中,您每次都在创建新的表单实例,例如:
private void OpenForm2
{
//open form2:
Form2 form2 = new Form2();
form2.ShowDialog(this);
//read form2 values:
if (form2.Checkbox1.Checked)
{
MessageBox.Show("Checkbox on form2 is checked")
}
}
相反,使用一个全局实例并且每次只显示它,这样就保留了它的状态:
Form2 form2 = new Form2();
private void OpenForm2
{
//open form2:
form2.ShowDialog(this);
//read form2 values:
if (form2.Checkbox1.Checked)
{
MessageBox.Show("Checkbox on form2 is checked")
}
}