我在我的应用程序中使用两个表单让Say A和B.在关闭A时我需要在A else的dispose方法中调用base.dispose(),有时我会因为内存问题而看到应用程序的一些意外行为。 表格B是表格B =新表格的本地申报表格,并由ShowDialog方法显示。 当我在表单A中调用base.dispose()时,它也关闭表单B.但我需要保持表格B开放。有什么建议 ?
谢谢, 阿比纳夫
答案 0 :(得分:1)
由于表格A拥有表格B,因此这是预期的行为。
将表单B的声明和创建作为Program.cs
中的全局资源移至您的应用,并从表单A调用其FormB的Show()
方法。
ShowDialog
意味着一个模态对话框,在您描述的场景中没有意义。如果您确实需要,请指定全局所有者并在ShowDialog(owner)
顺便说一句。专注于根本原因内存问题,而不是试图围绕它实现基于UI的监视功能。
答案 1 :(得分: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将关闭,表单B仍然存在。 FormA不是主要形式。