如何保存对象状态/选择

本文关键字:对象 状态 选择 保存 何保存 | 更新日期: 2023-09-27 18:30:59

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

提前感谢!

如何保存对象状态/选择

使用数据绑定和对象进行传递。下面的示例演示如何实现此目的,而无需创建任何静态内容。因为如果您这样做,这些值将绑定在一起:状态。已检查 = 假;这也将取消选中 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;}
}

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

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