0

我在我的应用程序中使用了两种形式,让说 A 和 B。在关闭 AI 时,我需要在 A 的 dispose 方法中调用 base.dispose(),否则有时我会因为内存问题看到应用程序的一些意外行为。Form B 是 Form B = new Form 本地声明的表单,由 ShowDialog 方法显示。当我在表单 A 中调用 base.dispose() 时,它也会关闭表单 B。但我需要保持表格 B 的打开状态。有什么建议么 ?

谢谢, 阿比纳夫

4

2 回答 2

1

由于表格 A 拥有表格 B,这是预期的行为。

将 Form B 的声明和创建作为全局资源移动到您的应用程序中,Program.cs并从 Form A 调用Show()FormB 的方法。

ShowDialog意味着一个模态对话框,这在您描述的场景中没有意义。如果您确实需要,请分配一个全局所有者并将其用于ShowDialog(owner)

顺便提一句。专注于内存问题的根本原因,而不是尝试围绕它实现基于 UI 的看门狗功能。

于 2012-04-26T07:23:30.967 回答
0

在您的应用程序设置中,您可以定义关闭模式(在主窗体上关闭或在最后一个窗体上关闭)。尝试将其设置为在最后一个表单上关闭。

更新:我自己尝试过并关闭调用者(在另一个表单上调用 ShowDialog() 的表单也会关闭对话框本身,我想这是设计使然。

但是,使用这段代码,我可以创建一个对话框,关闭调用者并且对话框仍然存在:

// inside formA
private void button2_Click(object sender, EventArgs e)
{
    var owner = new Form();
    var dialog = new FormB();

    // attach to the dialog.button1.Click event to force a close
    // of the current formA instance.
    // button1.modifiers has (at least) to be set internal
    dialog.button1.Click += (x, y) => this.Close();
    dialog.ShowDialog(owner);

    dialog.Dispose();
    owner.Dispose();
}

现在,如果我单击 FormB 中的 button1,FormA 将关闭,Form B 仍然存在。FormA 不是 MainForm。

于 2012-04-26T08:02:38.820 回答