我正在编写一个应用程序,要求从ComboBox中选择一个输入,然后要求从另一个ComboBox中选择第二个输入(基于第一个,每个第一个输入都有不同的可能性。)当两个设置了输入,用户点击一个按钮,将这些输入传递给第二个表单并使用form2.show()
打开它(输入通过属性传递)。我想要的是能够关闭这个新表单(此功能已完成),然后选择新输入并再次打开第二个表单,这次使用新输入。输入会更改新表单上调用的信息。现在,当我在更改输入后按下按钮打开新表单时,我的程序崩溃了。
有什么建议吗?!
谢谢!
更新
这是我得到的错误: System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'Form2'。
代码。
从主要表格:
private void button1_Click(object sender, EventArgs e)
{
report_form.TypeSelected = type_selected;
report_form.LoadSelected = load_selected;
report_form.Show();
}
来自儿童表格:
public string TypeSelected { get; set; }
public string LoadSelected { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
this.Text = "Report for " + TypeSelected + " load " + LoadSelected;
label1.Text = "Type: " + TypeSelected;
label2.Text = "Load: " + LoadSelected;
dataGridView1.DataSource = bindingSource1;
GetData();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
答案 0 :(得分:1)
从您的代码中看起来您可能多次显示子表单。当你调用close时,表单是DIsposed并再次调用show而不重新实例化将导致该异常。您需要隐藏您的子表单而不是关闭它,或者如果您关闭它,每次要显示它时都要重新创建它。 (Hide而不是关闭。)
此外,您可以考虑将ShowDialog用于您的子表单。如果您不希望或不需要用户使用父表单,这是收集数据的首选方法...它极大地简化了您与子表单交互的方式。
高马:您应该尝试将您的应用程序重构为MVC (model, view controller.)控制器类将决定哪些Forms加载打开以及何时加载它们之间的模型(数据)。这种关注点分离将极大地帮助您组织应用程序并远离问题。或MVP:(Model View Presenter)