为什么我不能在C#中关闭表单?

时间:2009-02-16 19:09:38

标签: c# .net winforms

我无法以编程方式关闭其中一个表单。有人能帮助我吗?

以下是代码:

    private void WriteCheck_Load(object sender, EventArgs e) {
        SelectBankAccountDialog sbad = new SelectBankAccountDialog();
        DialogResult result = sbad.ShowDialog();
        if (result == DialogResult.Cancel) {
            this.Close();
        } else {
            MessageBox.Show(result.ToString());
        }
        MessageBox.Show(sbad.bankaccountID.ToString());
    }

3 个答案:

答案 0 :(得分:4)

正如配置程序中提到的那样(在评论中),表单必须在关闭之前显示,因此,您应该在显示事件中执行此操作,而不是加载事件。 em>事件而不是。

如果您不希望对话框中显示该表单,我猜您可以将事件代码包装在Visible = false中;

总之,基本代码是

    private void WriteCheck_Shown(object sender, EventArgs e)
    {
        Visible = false;
        SelectBankAccountDialog sbad = new SelectBankAccountDialog();
        DialogResult result = sbad.ShowDialog();
        if (result == DialogResult.Cancel) {
            this.Close();
        } else {
            MessageBox.Show(result.ToString());
        }
        MessageBox.Show(sbad.bankaccountID.ToString());
        Visible = true;
    }

答案 1 :(得分:3)

通过调用Form.Close(),表单应该关闭,但是直到所有等待事件都被处理完毕。您还有机会取消FormClosing活动中的表单结束。

首先,在您致电return后,您可能希望this.Close()。如果它仍未关闭,请逐步执行代码并查看发生的情况。您可能必须设置并检查“强制关闭”标志,并在实际关闭之前从任何其他处理方法返回。

答案 2 :(得分:0)

实际问题是windows不会让表单关闭它的加载方法。我必须在构造上显示对话框,然后如果对话框结果取消,我必须抛出异常并在表单创建时捕获异常。

This place更多地谈论它