【问题标题】:How to save object state/selection?如何保存对象状态/选择?
【发布时间】:2013-09-15 10:09:24
【问题描述】:

我有 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 使用相同的表单实例,它们就会被保存。关闭表单不会清除其任何控件值。
  • 我该怎么做?大声笑
  • 查看我的答案以获取一些代码。

标签: c# winforms


【解决方案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;}
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2023-04-06
      • 1970-01-01
      • 2011-11-15
      • 2021-04-08
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多