如何保存对象状态/选择?

时间:2013-09-11 11:45:04

标签: c# winforms

我有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")
}
}

提前致谢!

2 个答案:

答案 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")
    }
}