c#中windows应用程序如何跳转窗体(如何关闭)

时间:2022-08-31 00:16:12
应用程序窗体都会有最小化,最大化,和关闭
如果在form1跳转到form2
使用的方法是隐藏form1 显示form2的话,按form2的关闭图标(就是右上角的那个交叉按钮)只能关闭form2,不能把应用程序整个关闭,如果我想要关闭任意一个form的都可以实现关闭整个程序要如何写,另外的话,如果按那个关闭键,需要弹出一个提示框,提示确认关闭和返回程序,又该如何写,希望各位大侠们能帮助我!!!
谢谢!!!

31 个解决方案

#1


只要首先实例化一个窗体,然后用实例化的窗体点要转换到的窗体就行了。OK?
Form1 form =new Form1
form.

#2


Application.Exit();

#3


form1作为主窗体, 关闭form2的话就不会退出程序了;
如果你要实现form2也可以关闭程序则在form1中监听form2的FormClose事件,判断一下是否需要退出程序,如果需要则关闭form1即可;
如果form1是主窗口,form1的关闭会直接导致程序关闭.

#4


你隐藏了Form1,在关闭From2后其实Form1仍在后台运行,所以下次运行时会报“当前程序正在被另一个进程使用...”错,其实解决办法很简单,就是在那两个窗体关闭的关闭事件中写一行代码,关闭当前所有进程即可:
//Form1窗体关闭事件 

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.ExitThread();//关闭该线程上的所有窗体
        }
]//Form2窗体关闭事件 

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.ExitThread();//关闭该线程上的所有窗体
        }

这样做就不会发生你遇到的情况了

#5


1.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体的方法:
(1)this.Close();
(2)Application.Exit();
(3)this.Dispos(); 

#6


to 4楼
如果需要弹出关闭提示,是否在关闭事件里面添加messagebox呢?

#7


路过。。。。

#8


是啊.
dialogresult result= messagebox.show("是否关闭","系统提示",messageboxbutton.yesorno,messageboxicon.information);
if(result==dialogresult.yes)
{
....
}

#9


有这样的吗》?

#10


Application.Exit();

#11


if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK)
{
  Application.exit()
}
else
{
 不做任何处理
}

#12


Application.exit() 

#13


引用 11 楼 youqi1984 的回复:
if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 

else 

不做任何处理 
}
正解

#14


在想要关闭的窗体的FormClosing事件中写代码!


        private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
        { 
            if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 


        } 


这样就OK啦

#15


引用 11 楼 youqi1984 的回复:
if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 

else 

不做任何处理 
}

这个

#16


不好意思,重新整理一下哈:


private void Form1_FormClosing(object sender, FormClosingEventArgs e) 

   if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.YesNo)==DialogResult.No) 
    { 
      e.Cancel = true;//取消关闭
    } 


#17


Form2 form=new Form2();//如果有参数的话可以在括号里写
form.show();
要全部推出就添加一个closing事件就行了

#18


#19


#20


1.继承form,自己实现,之后都调用自己的form。
2.form.closing (event)

#21


form 1 fomr 2做成单态,
然后当关或者最小化form 1 的时候,用form2.show()实现form2的打开,在form2初始化的时候写form1.display == false。
分别给两个窗口添加closing时间,用Application.exit() ,就可以了

#22


to 16楼
错误 1 “System.Windows.Forms.FormClosedEventArgs”并不包含“cancle”的定义
如果用e.cancle=true;的话,会出现上面的错误,是什么原因呢??

#23


需要两步:
一. 要添加Form2_FormClosing事件,在添加此方法之前首先要在Form2的初始化(initialization)中注册此事件
this.FormClosing +=          //具体代码我打不出来,vs会提示的

二. Form.cs中的代码(手打的,难免有拼写错误):
private void Form2_FormClosing(object sender, FormClosingEventArgs e) 

  if(MessageBox.Show("您即将退出系统,您确定吗?","您确定关闭本窗体吗?",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes) 

  Application.exit() 

else 

  e.Cancel;
}
}

#24


 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("是否关闭", "系统提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                return;
            }
            else
                e.Cancel = true;
       
        }

#25


不是很完整
不过看了之后有了更进一步的了解
谢谢

#26


这么好的帖子 还不解题。白眼狼  ,我倒是要谢谢这些高手了。基本上满足我现在的需求了

#27


还行吧如从form1 form=new form1();
         form.Show();

#28


#5楼 得分:5回复于:2009-03-14 18:05:011.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体

这个很好!以前经常这样干。。。

#29


引用 28 楼 newbie0617 的回复:
#5楼 得分:5回复于:2009-03-14 18:05:011.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体

这个很好!以前经常这样干。。。


不错

#30


引用 23 楼 athwind 的回复:
需要两步:
一. 要添加Form2_FormClosing事件,在添加此方法之前首先要在Form2的初始化(initialization)中注册此事件
this.FormClosing +=          //具体代码我打不出来,vs会提示的

二. Form.cs中的代码(手打的,难免有拼写错误):
private void Form2_FormClosing(object se……

这个有问题吧。在询问是否退出后,调用application.exit。而application.exit有会调用所有form的formclosing方法。那么又会弹出messagebox继续询问,而后才能退出,显然这是不行的。
参考MSDN如下:

Exit 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。 该方法并不强制退出该应用程序。Exit 方法通常从一个消息循环内调用,该方法强制 Run 返回。 若要只退出当前线程的某个消息循环,请调用 ExitThread。 

Exit 引发下列事件并执行关联的条件操作: 

为 OpenForms 属性表示的各个窗体引发 FormClosing 事件。 可以通过将这些窗体的 FormClosingEventArgs 参数的 Cancel 属性设置为 true,取消此事件。 

如果多个处理程序的其中之一取消该事件,则 Exit 将返回而无进一步操作。 否则,将为每个打开的窗体引发 FormClosed 事件,然后关闭所有正在运行的消息循环和窗体。 

#31


该回复于2012-04-25 09:59:43被版主删除

#1


只要首先实例化一个窗体,然后用实例化的窗体点要转换到的窗体就行了。OK?
Form1 form =new Form1
form.

#2


Application.Exit();

#3


form1作为主窗体, 关闭form2的话就不会退出程序了;
如果你要实现form2也可以关闭程序则在form1中监听form2的FormClose事件,判断一下是否需要退出程序,如果需要则关闭form1即可;
如果form1是主窗口,form1的关闭会直接导致程序关闭.

#4


你隐藏了Form1,在关闭From2后其实Form1仍在后台运行,所以下次运行时会报“当前程序正在被另一个进程使用...”错,其实解决办法很简单,就是在那两个窗体关闭的关闭事件中写一行代码,关闭当前所有进程即可:
//Form1窗体关闭事件 

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.ExitThread();//关闭该线程上的所有窗体
        }
]//Form2窗体关闭事件 

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.ExitThread();//关闭该线程上的所有窗体
        }

这样做就不会发生你遇到的情况了

#5


1.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体的方法:
(1)this.Close();
(2)Application.Exit();
(3)this.Dispos(); 

#6


to 4楼
如果需要弹出关闭提示,是否在关闭事件里面添加messagebox呢?

#7


路过。。。。

#8


是啊.
dialogresult result= messagebox.show("是否关闭","系统提示",messageboxbutton.yesorno,messageboxicon.information);
if(result==dialogresult.yes)
{
....
}

#9


有这样的吗》?

#10


Application.Exit();

#11


if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK)
{
  Application.exit()
}
else
{
 不做任何处理
}

#12


Application.exit() 

#13


引用 11 楼 youqi1984 的回复:
if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 

else 

不做任何处理 
}
正解

#14


在想要关闭的窗体的FormClosing事件中写代码!


        private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
        { 
            if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 


        } 


这样就OK啦

#15


引用 11 楼 youqi1984 的回复:
if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.OKCancel)==DialogResult.OK) 

  Application.exit() 

else 

不做任何处理 
}

这个

#16


不好意思,重新整理一下哈:


private void Form1_FormClosing(object sender, FormClosingEventArgs e) 

   if(MessageBox.Show("确定要关闭吗","提示",MessageBoxButtons.YesNo)==DialogResult.No) 
    { 
      e.Cancel = true;//取消关闭
    } 


#17


Form2 form=new Form2();//如果有参数的话可以在括号里写
form.show();
要全部推出就添加一个closing事件就行了

#18


#19


#20


1.继承form,自己实现,之后都调用自己的form。
2.form.closing (event)

#21


form 1 fomr 2做成单态,
然后当关或者最小化form 1 的时候,用form2.show()实现form2的打开,在form2初始化的时候写form1.display == false。
分别给两个窗口添加closing时间,用Application.exit() ,就可以了

#22


to 16楼
错误 1 “System.Windows.Forms.FormClosedEventArgs”并不包含“cancle”的定义
如果用e.cancle=true;的话,会出现上面的错误,是什么原因呢??

#23


需要两步:
一. 要添加Form2_FormClosing事件,在添加此方法之前首先要在Form2的初始化(initialization)中注册此事件
this.FormClosing +=          //具体代码我打不出来,vs会提示的

二. Form.cs中的代码(手打的,难免有拼写错误):
private void Form2_FormClosing(object sender, FormClosingEventArgs e) 

  if(MessageBox.Show("您即将退出系统,您确定吗?","您确定关闭本窗体吗?",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes) 

  Application.exit() 

else 

  e.Cancel;
}
}

#24


 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("是否关闭", "系统提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                return;
            }
            else
                e.Cancel = true;
       
        }

#25


不是很完整
不过看了之后有了更进一步的了解
谢谢

#26


这么好的帖子 还不解题。白眼狼  ,我倒是要谢谢这些高手了。基本上满足我现在的需求了

#27


还行吧如从form1 form=new form1();
         form.Show();

#28


#5楼 得分:5回复于:2009-03-14 18:05:011.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体

这个很好!以前经常这样干。。。

#29


引用 28 楼 newbie0617 的回复:
#5楼 得分:5回复于:2009-03-14 18:05:011.如果在Form1的窗体上添加一个跳转至Form2的按钮
2.然后双击该按钮,在它的单击事件中添加这些代码
3.Form2 form2 = new Form2();
form2.show();
即可实现从窗体1跳转至窗体2
4.关闭窗体

这个很好!以前经常这样干。。。


不错

#30


引用 23 楼 athwind 的回复:
需要两步:
一. 要添加Form2_FormClosing事件,在添加此方法之前首先要在Form2的初始化(initialization)中注册此事件
this.FormClosing +=          //具体代码我打不出来,vs会提示的

二. Form.cs中的代码(手打的,难免有拼写错误):
private void Form2_FormClosing(object se……

这个有问题吧。在询问是否退出后,调用application.exit。而application.exit有会调用所有form的formclosing方法。那么又会弹出messagebox继续询问,而后才能退出,显然这是不行的。
参考MSDN如下:

Exit 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。 该方法并不强制退出该应用程序。Exit 方法通常从一个消息循环内调用,该方法强制 Run 返回。 若要只退出当前线程的某个消息循环,请调用 ExitThread。 

Exit 引发下列事件并执行关联的条件操作: 

为 OpenForms 属性表示的各个窗体引发 FormClosing 事件。 可以通过将这些窗体的 FormClosingEventArgs 参数的 Cancel 属性设置为 true,取消此事件。 

如果多个处理程序的其中之一取消该事件,则 Exit 将返回而无进一步操作。 否则,将为每个打开的窗体引发 FormClosed 事件,然后关闭所有正在运行的消息循环和窗体。 

#31


该回复于2012-04-25 09:59:43被版主删除