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

C# 如何保存对象状态/选择?,c#,winforms,C#,Winforms,我有两张表格。一个是主窗体(form1),另一个(form2)在我按下按钮时被调用 当我按下一个按钮时,form2显示出来,它包含几个复选框和组合框 我的问题是,如何存储或保存复选框状态和组合框选择,以便在关闭form2后在form1中使用它们(检查它们的状态/选择) 以下是一个基本示例: Form2: --I click on checkbox and the state changes: checkbox1.Checked = true; Form1: private void bu

我有两张表格。一个是主窗体(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")
}
}

提前谢谢

在当前代码中,您每次都在创建新的表单实例,例如:

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

使用数据绑定和对象传递。下面的示例演示了如何实现这一点,而不必使任何内容处于静态状态。因为如果这样做,这些值将绑定在一起: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;}
}

只需对Form2使用相同的表单实例,它们就会被保存。关闭一个窗体不会清除它的任何控制值。我该怎么做?请参阅我的答案以获取一些代码。