【问题标题】:c# close form change values open new formc# 关闭表单更改值打开新表单
【发布时间】:2013-03-21 20:21:48
【问题描述】:

我正在编写一个应用程序,它要求从 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();
    }

【问题讨论】:

  • 请出示您的代码。
  • 没有看到你的代码这是任何人的猜测
  • 请显示错误。虽然我猜这是一个 Form Disposed...
  • 您必须调用this.Hide(); 而不是this.Close(); 或使用new 重新创建report_form 对象,然后才能访问这些属性。

标签: c# winforms


【解决方案1】:

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

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

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

【讨论】:

  • @user2196809 如果您认为 Paul 的回答在未来对其他人有所帮助,请记得投票。它表明问题和答案对未来的用户有帮助。他的回答也非常简洁明了。
猜你喜欢
  • 2010-12-20
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多