我在我的应用程序中使用了两种形式,让说 A 和 B。在关闭 AI 时,我需要在 A 的 dispose 方法中调用 base.dispose(),否则有时我会因为内存问题看到应用程序的一些意外行为。Form B 是 Form B = new Form 本地声明的表单,由 ShowDialog 方法显示。当我在表单 A 中调用 base.dispose() 时,它也会关闭表单 B。但我需要保持表格 B 的打开状态。有什么建议么 ?
谢谢, 阿比纳夫
由于表格 A 拥有表格 B,这是预期的行为。
将 Form B 的声明和创建作为全局资源移动到您的应用程序中,Program.cs
并从 Form A 调用Show()
FormB 的方法。
ShowDialog
意味着一个模态对话框,这在您描述的场景中没有意义。如果您确实需要,请分配一个全局所有者并将其用于ShowDialog(owner)
顺便提一句。专注于内存问题的根本原因,而不是尝试围绕它实现基于 UI 的看门狗功能。
在您的应用程序设置中,您可以定义关闭模式(在主窗体上关闭或在最后一个窗体上关闭)。尝试将其设置为在最后一个表单上关闭。
更新:我自己尝试过并关闭调用者(在另一个表单上调用 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。