【问题标题】:I cant dispose the first form when calling second form using c#使用 c# 调用第二个表单时,我无法处理第一个表单
【发布时间】:2023-03-05 09:32:02
【问题描述】:

使用 c# 调用第二个表单时如何处理第一个表单,这是我的代码:

Form2 f2 = new Form2();
f2.Show();
this.Dispose();

【问题讨论】:

  • 你尝试处理第一个表单,你应该隐藏表单。因为它是父窗体
  • 对不起先生,我是编程新手,所以我不太熟悉父表单。
  • 那么你真正想要发生什么?要隐藏父窗体吗?
  • 查看我的两个表单项目:stackoverflow.com/questions/34975508/…
  • 谢谢先生,下面有人已经解释过了:)谢谢你的好意。我现在知道为什么它不起作用了

标签: c#


【解决方案1】:

为什么你要处理主窗体,而不是你可以简单地隐藏第一个窗体:

Form2 f2 = new Form2();

f2.Show();   //It shows the new form(Second Form)

this.Hide(); //It hides the current form

它将隐藏主窗体并显示第二个窗体。

【讨论】:

    【解决方案2】:

    如果您处理主表单,应用程序将关闭。

    试试这个代码

    this.Visible = false;
    
    Form2 f2 = new Form2();
    
    f2.ShowDialog();
    
    this.Visible = true;
    

    只要 Form2 打开,这只会隐藏主窗体。

    【讨论】:

    • 不会 this.hide() 使新表单的可见性成为真实,那么如果您需要返回只需调用另一个新表单?或者这会导致问题。
    • 谢谢 Zaid Al Shaattle 先生,这就是我想阅读的解释。首先我认为可见和隐藏具有相同的效果。我认为 this.Hide 会创建另一个表单,但由于它被隐藏,我不会看到我已经在后台创建了多个表单。所以现在我知道我应该使用 this.Hide 来避免创建多个 form1 或父表单。我的理解对吗?
    • Zaid,隐藏控件相当于将Visible属性设置为false。关注this link
    【解决方案3】:

    当您运行命令 new Form2() 时,您正在从 Form1 创建一个新的 Form 实例作为子元素。因此,您不能处置父 Form1(在您的代码中为 this)。

    【讨论】:

    • 感谢您提供的知识,先生。现在我明白为什么它不工作了
    • 这不是真的。 f2 不是this 的子代...这里的主要“问题”是Form1 是应用程序的MainForm:Application.Run(new Form1()); 这就是为什么Application(实际上是ApplicationContext)句柄此Form1 实例的HandleDestroyed 事件并调用ExitThread 导致应用程序关闭。 这意味着关闭/释放应用程序的主窗体将导致关闭整个应用程序。
    • 谢谢斯蒂芬先生的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多