2013-10-22 36 views
2

问题:我已经创建了一个有两种形式的程序。当在Form1上按下一个按钮时,程序“隐藏”Form1并“显示”Form2。问题是,当我关闭Form2时,程序继续在后台运行,我相信这是因为程序需要关闭Form1,而不是为了程序结束而隐藏。如何关闭C#程序中,从第二形态(不隐藏)C#多种实现形式问题

我的问题是我怎么重写第二种形式来关闭程序并不能掩盖?

private void btnCreate_Click(object sender, EventArgs e) 
    { 
     Form2.Show(); 
     Form1.Hide(); 
    } 

我知道我可以从Form2再次显示Form1,然后关闭,但我真的很想避免这种情况。

+1

()',而不是'Form1.Hide()'或'调用Application.Exit()''时Form2'已经关闭(我不知道你的应用程序是如何制造,收盘' Form1'甚至可能退出应用程序)。 –

+0

您可能想阅读http://stackoverflow.com/a/11504844/1588471 可能是解决您的问题。 – stckvflw

+0

@Adriano这将无法正常工作。当_“main”_窗口关闭时,应用程序将终止。 –

回答

3

可以使用FormClosed事件:

private void btnCreate_Click(object sender, EventArgs e) 
    { 
     Form2.Show(); 
     Form2.FormClosed += new FormClosedEventHandler(form2_FormClosed); 
     Form1.Hide(); 
    } 

    void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Form1.Close(); 
    } 
4

你有几个选项来做到这一点,根据你的应用如何。

第一个直观的解决方案是拨打Close(),而不是Hide()拨打Form1。只有在您的应用程序的Form1不是主要形式(主消息循环中的一个以Application.Run()开始)时才有效。

第二种解决方案是添加事件处理程序FormClosed事件的Form2,并关闭第一种形式,当第二个被关闭:

private void btnCreate_Click(object sender, EventArgs e) 
{ 
    Form2.Show(); 
    Form2.FormClosed += new FormClosedEventHandler(delegate { Close(); }); 
    Form1.Hide(); 
} 

您可以直接关闭Form1或致电Application.Exit()(如果你没有打开多个表单你想关闭在一起)。

最后的解决方案是让第二表格第一位的所有者

private void btnCreate_Click(object sender, EventArgs e) 
{ 
    Form2.Show(); 
    Form1.Owner = Form2; 
    Form1.Hide(); 
} 

当所有者关闭这将自动关闭所有的形式。这是我更喜欢的解决方案,但它只适用于一种形式(一个拥有者只能拥有一种形式)。

+0

好的答案,thanx! – Csati

0

在应用开发特别是对的WinForms为用户着想,总是有一种主要形式(无论是的MdiParent或单亲),将永远是主要的形式,所有其他形式的表演。

给予回答的问题将鼓励不好的编程习惯。

让MainForm的接近和应用程序将结束。隐藏form1不会结束应用程序。使用`Form1.Close

+0

我尝试了不同的选择,你的工作很好。 – umlcat