1

我正在编写一个应用程序,要求从 ComboBox 中选择一个输入,然后要求从另一个 ComboBox 中选择第二个输入(基于第一个,每个第一个输入都有不同的可能性。)当两个输入都设置时,用户点击一个按钮,将这些输入传递给第二个表单并使用 aform2.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();
    }
4

1 回答 1

1

从您的代码看来,您可能多次显示子表单。当您调用 close 时,表单将被释放,并且再次调用 show 而不重新实例化它会导致该异常。你要么只需要隐藏你的子窗体而不是关闭它,要么如果你关闭它,每次你想显示它时重新创建它。(隐藏而不是关闭。)

此外,您可以考虑将ShowDialog用于您的子表单。如果您不希望或不需要用户使用父表单,这是收集数据的首选方法......它极大地简化了您与子表单的交互方式。

高马:您应该尝试将您的应用程序重构为MVC(模型、视图控制器)。控制器类将决定打开哪些表单以及何时加载,并在它们之间传递模型(数据)。这种关注点分离将极大地帮助您组织您的应用程序并摆脱您的问题。或者 MVP:(模型视图演示者

于 2013-03-21T20:24:49.483 回答