2015-10-10 112 views
0

好吧,我在c#中做了一个多窗体应用程序。这意味着我有更多的表单,其中包括主菜单。所有的表格都有一个返回到主菜单的按钮(除了主菜单窗体有按钮访问特定窗体) 这是我如何进行这种转换。转换为另一种形式

this.Close(); 
Form1 Myform1 = new Form1() 
Myform1.Show(); 

的问题是,当我随意关闭应用程序,它dissapear,因为我想要的,但它不会关闭completely.I意味着它只能dissappeared,但它仍然运行。 为什么?以及如何完全关闭?

回答

0

您遇到的基本问题是,默认情况下,当主窗体(首先显示的窗体)关闭时,Winforms程序将退出。这是因为对该表单的引用传递给程序的Main()方法中的Application.Run(Form)方法。

有多种方式来处理这个问题,但恕我直言最直接的是不关闭表格。相反,请在主窗体上调用Hide()方法。这会导致它不被显示,但不会被关闭。当你想返回时,只需在该表单实例上调用Show(),它将再次可见。

当然,要实现这一点,您需要将该引用传递给任何其他可能想要使用它的代码。所以,你可能结业例如用代码看起来像这样:

this.Hide(); // Not Close()! 
Form1 Myform1 = new Form1(this) 
Myform1.Show(); 

然后在Form1类,您就可以关闭其中,并再次显示主窗体的地方,你会调用Show()方法。这可能是这个样子:

partial class Form1 : Form 
{ 
    private readonly MainForm _mainForm; 

    public Form1(MainForm mainForm) 
    { 
     _mainForm = mainForm; 
    } 

    protected override void OnFormClosed(FormClosedEventArgs e) 
    { 
     _mainForm.Show(); 
    } 
} 

另一种方式来处理这个问题是只没有传递到摆在首位的Application.Run()方法MainForm。相反,调用Application.Run()的无参数超载。但是,那么您将需要其他一些关闭程序的机制。例如,在适当的时候调用Application.Exit()


虽然这在我看来是一个非常常见的问题,但我无法找到另一个看似完全重复的问题。然而,肯定有大量的其他相关问题,包括以下内容:

C# Application.Run without Form
Close a windows form without exiting the entire application
How can I close a login form and show the main form without my application closing?
If I close one of my forms, they all close
Methods this.hide() vs this.close()

这些最后两个是特别重要的,但不幸的是顶端回答在每一个可能是最糟糕的方式来解决问题(即把每个窗体放入它自己的线程…一个应该使用多个UI线程作为最后的手段onl y,这样做是肯定这里没有要求)。因此,在上述任何一个问题中,您都可以阅读任何建议。答案中有一些很好的信息,但也有相当不好的建议。

相关问题