winform窗体跳转关闭怎么在关闭一个窗体后显示另一个窗体

问者:58848&#) 信誉:96 级别:user5 日期: 23:49:27
小弟一直都是做 B/S开发
这几天心血来潮 想写一写 C/S程序
一入门就遇到这个问题 我在 登陆窗体体 NEW了 一个新窗体吧新窗体Show了 之后 原来得窗体cLOSE。新NEW得窗体也关闭了
不知道为什么 请指点
另求 C/S程序得 设计方法。
比如如何处理 公共得变量 等应该注意得事情
希望大家不吝赐教
答者:wzq6511() 信誉:100 级别:user1 日期: 0:36:28 id:
不要用close,用hide,原先的窗体只能隐藏起来不能关闭。
答者:bejon(阿牛[如果我懂,必坦诚相告;如果您懂,请不怜赐教。]) 信誉:93 级别:star1 日期: 2:00:21 id:
在new form后使用this.来完成
在new form之前把窗体id写在注册表,然后在new form之后检查那里,如果有值就使用api关闭那个窗体,然后把注册表清空。
答者:zhgroup(王员外) 信誉:99 级别:star1 日期: 8:06:33 id:
1、要看原窗体是那个窗体了,如果是入口的窗体,则应hide,想要显示时可用Show.
如果是登陆窗体,在主窗体的Main入口处
FormLogin frm = new FormLogin();
frm.ShowDialog();
if 登陆失败
2、和B/S基本类似,只不过对于状态信息比较容易控制。
答者:qzh1119(大浪淘沙) 信誉:59 级别:user2 日期: 8:12:07 id:
答者:qzh1119(大浪淘沙) 信誉:59 级别:user2 日期: 8:12:33 id:
关注,学习中
答者:bestshl(快乐的Coder) 信誉:100 级别:user2 日期: 8:24:52 id:
zhgroup(王员外) 正解
答者:interboy(冯东) 信誉:100 级别:user2 日期: 8:27:37 id:
zhgroup(王员外) 说的对,如果你把main函数放在loginform里的话,那么它就是主窗体,如果你在它里面调用了this.close();你想啊,主窗体都关了,别的呢,皮之不存,毛将焉附!
建议把loginform作为子窗体,通过主窗体了掉子窗体进行判断
答者:58848&#) 信誉:96 级别:user5 日期: 12:40:41 id:
问题是我不想HIde
真的没有其他的办法了么?
答者:lovefootball(蟑螂(生活就是扯淡--做人要放低姿态)) 信誉:98 级别:star2 日期: 12:49:07 id:
上面已经说清楚了
如果你不想hide
那你就在main里面先new这个登陆窗体
如果登陆成功在run主窗体
答者:zahuifan(杂烩饭) 信誉:93 级别:star1 日期: 12:56:33 id:
答者:guyes123(以为喜欢这里,所以来接分) 信誉:100 级别:user1 日期: 13:00:06 id:
一般还是用HIDE吧
其他的我就不会了
答者:naturalth(自我批判,是思想、品德、素质、技能创新的优良工具) 信誉:99 级别:user4 日期: 13:07:31 id:
#region "Main"
public ModMain()
[STAThreadAttribute]
static void Main()
//异常处理
Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler);
Common.Database.ConnectionString = Get_Info();
frmLogon frm = new frmLogon();
frm.txtUser.Text = loginU
if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel)
System.Windows.Forms.Application.Run(new myMenu());
#endregion
答者:xvting(xvting) 信誉:103 级别:user4 日期: 15:10:44 id:
VS默认的WinForm程序模板只有一个程序消息循环,并且入口Form关闭的同时退出程序消息循环,结束程序。
消息循环(入口Form)
答者:xvting(xvting) 信誉:103 级别:user4 日期: 15:14:42 id:
可以设计下面的流程
消息循环(登陆Form)---------
消息循环(主Form)
|--------------------------
答者:xvting(xvting) 信誉:103 级别:user4 日期: 15:16:34 id:
StartApp.cs文件
/////////////////////////////////////////////////////////////////
using System.Windows.F
using System.D
using System.T
namespace WinFromDemo
public class StartApp
private static bool LoginResult =
[STAThread]
static void Main()
//First Message Loop
LoginContext loginContext = new StartApp.LoginContext();
Application.Run(loginContext);
if (LoginResult)
//Second Message Loop
StartApp.MainContext mainContext = new StartApp.MainContext();
Application.Run(mainContext);
public class LoginContext : ApplicationContext
private LoginDialog loginD
public LoginContext()
loginDialog = new LoginDialog();
loginDialog.StartPosition = FormStartPosition.CenterS
loginDialog.Closed += new EventHandler(OnFormClosed);
loginDialog.Show();
private void OnFormClosed(object sender, EventArgs e)
LoginResult = !(this.loginDialog.DialogResult == DialogResult.Cancel);
ExitThread();
public class MainContext : ApplicationContext
private Form mainF
public MainContext()
mainForm = new Form();
mainForm.StartPosition =
FormStartPosition.CenterS
mainForm.Closed += new EventHandler(OnFormClosed);
mainForm.Show();
private void OnFormClosed(object sender, EventArgs e)
ExitThread();
答者:csLius() 信誉:100 级别:user2 日期: 15:17:56 id:
http://blog.csdn.net/Knight94/archive//1104957.aspx
答者:pegtop(再回首) 信誉:100 级别:user2 日期: 15:23:51 id:
新窗体是在原窗体基础上建立起来的,不能关闭原窗体只能隐藏.
要想处理全局变量,建议采用Static变量
答者:pretty_soft() 信誉:100 级别:user1 日期: 15:36:50 id:
我觉得还是
开启---登陆画面/显示主窗体默认界面---用showdialog显示登陆---判断返回值初始权限
这样比较好
把应用程序加载放到启动画面去
这种更适合比较大的系统,不同的模块不同的用户权限
答者:Santos(快乐的GG) 信誉:100 级别:user4 日期: 16:15:46 id:
ShowDialog();方法才是正解.
Button1_Click()
xxxForm frm = new xxxForm();
frm.ShowDialog();
答者:kissknife(侧身向南边) 信誉:100 级别:user5 日期: 16:20:54 id:
/KissKnife/archive//500158.html
答者:ttgzs(一路狂奔) 信誉:100 级别:user1 日期: 17:01:58 id:
#region "Main"
public ModMain()
[STAThreadAttribute]
static void Main()
//异常处理
Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler);
Common.Database.ConnectionString = Get_Info();
frmLogon frm = new frmLogon();
frm.txtUser.Text = loginU
if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel)
System.Windows.Forms.Application.Run(new myMenu());
#endregion
答者:kubbye(小蛤蟆就是我) 信誉:100 级别:user1 日期: 23:15:00 id:
准确的说,做为启动窗体的那个窗体是不能关的,它关了,程序就停了,其他的窗体可以关,启动窗体只能隐藏
答者:kubbye(小蛤蟆就是我) 信誉:100 级别:user1 日期: 23:17:29 id:
接上面,你可以把主界面作为启动窗体,然后在主界面未显示出来前,先显示登录窗体,登录成功再显示主窗体,登录不成功,直接退出,直接在form的load事件中写就好了
答者:qiujb(楚留香) 信誉:100 级别:user2 日期: 8:12:25 id:
zhgroup(王员外) 正解
答者:Samen168(让代码为你写代码) 信誉:95 级别:star1 日期: 8:56:52 id:
loginform lf = new loginform();
if(lf.Showdialog() == DialogResult.OK)
mainform mf = new mainform();
mf.show();
这样根据不存在谁打开谁
答者:Samen168(让代码为你写代码) 信誉:95 级别:star1 日期: 8:57:00 id:
答者:sunxianyu(找工作) 信誉:100 级别:user2 日期: 9:05:26 id:
zhgroup(王员外) ( ) 信誉:99
答者:fds2003(Hunter) 信誉:99 级别:user5 日期: 9:17:54 id:
上面能说的都讲了!
答者:yangao(偶新手 请问门在哪里?) 信誉:100 级别:user4 日期: 9:41:16 id:
答者:henrydee1(小d) 信誉:101 级别:user2 日期: 10:29:21 id:
if (this.ActiveMdiChild!=null)
this.ActiveMdiChild.Close(); //关闭已经打开的子窗体
InSchool child_InSchool=new InSchool();
child_InSchool.MdiParent=//this表示本窗体为其父窗体
child_InSchool.Show();
答者:xiaoliangwh(小亮wh) 信誉:100 级别:user2 日期: 23:55:03 id:
答者:sdl2005lyx() 信誉:100 级别:user4 日期: 8:26:41 id:
lz:一个很简单的办法(刚好前几天解决的):
你在原来的窗体设置一个public bool bNew=的变量,在你要new新窗体的地方改成如下代码:
this.Close();
//原来窗体消失了,但它的类作用域并没有消失
然后在你原来定义、使用原窗体变量的地方,即frmOld.ShowDialog();之后:
if(frmOld.bNew)
NewForm frmNew=new NewForm ();
frmNew.ShowDialog();
问题就搞定了。。。
答者:GXY2005(晓晨美眉好^_^) 信誉:94 级别:user5 日期: 8:52:21 id:
答者:wuhuiITren(CSDN男主角) 信誉:100 级别:user2 日期: 13:26:23 id:
楼上的都说了,楼主自己一个个试就可以了啊,想怎么办就怎么办啊
答者:slex(蘂橤(蛋不能扯远,笑不能搞大)) 信誉:100 级别:user4 日期: 14:35:50 id:
上面的那两个方法已经能解决lz问题了,该结了 呵呵
原窗体如果是主窗体的话,那么原窗体是不可以Close,只能hide.主窗体Close了就会把整个程序关闭.&&&&
&re: [转]新手入门-WinForm如何打开一个新窗体得同步关闭当前窗体。另求C/S结构程序设计方式。[未登录]
在手持设备端开发的时候,hide不太好用。&&&&C#中如何在一个窗体内点击一个按钮关闭另一个窗体如题 谢谢了-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
C#中如何在一个窗体内点击一个按钮关闭另一个窗体如题 谢谢了
来源:互联网 发表时间: 15:54:16 责任编辑:王亮字体:
为了帮助网友解决“C#中如何在一个窗体内点击一个按钮关闭另一个窗体如题 谢谢了”相关的问题,中国学网通过互联网对“C#中如何在一个窗体内点击一个按钮关闭另一个窗体如题 谢谢了”相关的解决方案进行了整理,用户详细问题包括:此时F_main没有关闭,打开form1,比如我的主界面是F_main,我点击F_main的一个按钮,然后我点击F_main另一个按钮我用的是开发环境是,打开form2,接着就是form1关闭:Microsoft Visual Studio 2005 C#中如何在一个窗体内点击一个按钮关闭另一个窗,具体解决方案如下:解决方案1:
EventArgs e) { Form2 fr2 = new Form2(); fr1! 不会的话QQ我.Close(); } 自己看着添加进去哈我给你写了段代码测试过了的, EventArgs e) { fr1; } private void button2_Click(object sender.Show(); private void button1_Click(object sender! Form1 fr1 = new Form1().Show(); fr2
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号现在要实现窗口1中有一个按钮,点击后弹出另一个窗口2,
在窗口2中用户输入一些参数,将这些参数保存并显示至窗口1中。
这该怎么实现?
首先实现点击一个按钮,弹出一个窗口的时候,
我定义了一个FORM2的窗口类,然后在窗口1的FORM1类里调用:
public&class&Form2&:&Form
Form2这个类是在代码最底部定义的。
然后在Form1的的一个button里调用:
Form2&fm&=&new&Form2();
fm.Show();
结果运行的时候,我一点击按钮,屏幕闪一下就直接退出程序了。
这是为什么?
回复讨论(解决方案)
设置form2的父窗口。
http://bbs.csdn.net/topics/
快珍藏起来吧。
估计是form2在show的时候产生bug,导致程序崩溃了
另外你可以调用form2的showDialog方法,让用户完成交互
在form2定义的关闭事件
然后在form1中写此事件+=
sender&和&e随便传参数。。
利用事件传值是最好的办法,给你的源代码,不懂在问我
你在调用Form2的button那里设个断点一步一步的试试,看看是哪里错了
简单点静态变量就OK
你的代码怎么会直接退出,是不是你Close了主窗口?
http://blog.csdn.net/wuyazhe/article/details/5642431
可参考一下这个。
http://blog.csdn.net/fosu_edu_cn/article/details/9451377
给个静态变量传值就行&&虽然不太提倡用太多静态变量
事件委托吧
我试了&fm.ShowDialog()也一样。。闪一下退出。
我单步调了,能执行到ShowDialog,也没报错,继续往下执行代码,但是没瞧见窗口。。
设了父窗口,也没用。
很奇怪,我发现form2有跳出来,但是就像透明的一样,跳出来一下程序就又退出了。
单步调之后发现,在程序退出之前,程序跳到program.cs中的这段代码:
&&&&&&&&static&void&Main()
&&&&&&&&&&&&#region&Api_CallCreateM
&&&&&&&&&&&&IntPtr&hM
&&&&&&&&&&&&string&strAppName&=&System.Reflection.Assembly.GetExecutingAssembly().GetName().N
&&&&&&&&&&&
&&&&&&&&&&&&hMutex&=&CreateMutex(null,&true,&strAppName);
&&&&&&&&&&&&if&(GetLastError()&!=&ERROR_ALREADY_EXISTS)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Application.Run(new&Form1());
&&&&&&&&&&&&}
&&&&&&&&&&&&else&&//程序跳到这个else里然后退出了。
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&MessageBox.Show(&本程序只允许同时运行一个&);
&&&&&&&&&&&&&&&&ReleaseMutex(hMutex);
&&&&&&&&&&&&}
&&&&&&&&&&&&#endregion&&
&&&&&&&&&&&&&&&
  完美解决方案:
  写全局静态类,内容为form列表。
 示例如下:建两个窗体,form1(主窗体),&form2
 建一个类Forms
public&static&class&Forms
public&static&Form1&f1;&&//调用form1
public&static&Form2&f2;&&//调用form2
 form1中放一个label,&一个buttons,&建一个公用接口
public&Form1()
InitializeComponent();
Forms.f1&=&&&//将静态列表中的f1挂接至form1
private&void&button1_Click(object&sender,&EventArgs&e)
if&(Forms.f2&==&null&||&Forms.f2.IsDisposed)&Forms.f2&=&new&Form2();&&//如果form2未创建或已关闭则重新创建
Forms.f2.Show();&&//显示form2
public&void&SetLabel(string&s)&&//用于你所说的窗口间传参数,不一定要是过程,只要是public就可以
this.label1.Text&=&s;
 form2中放一个textbox
private&void&textBox1_TextChanged(object&sender,&EventArgs&e)
Forms.f1.SetLabel(textBox1.Text);&&//textbox发生改变时,调用主窗体内声明的公共方法
至此完美解决,结贴收分!
单步调之后发现,在程序退出之前,程序跳到program.cs中的这段代码:
&&&&&&&&static&void&Main()
&&&&&&&&&&&&#region&Api_CallCreateM
&&&&&&&&&&&&IntPtr&hM
&&&&&&&&&&&&string&strAppName&=&System.Reflection.Assembly.GetExecutingAssembly().GetName().N
&&&&&&&&&&&
&&&&&&&&&&&&hMutex&=&CreateMutex(null,&true,&strAppName);
&&&&&&&&&&&&if&(GetLastError()&!=&ERROR_ALREADY_EXISTS)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Application.Run(new&Form1());
&&&&&&&&&&&&}
&&&&&&&&&&&&else&&//程序跳到这个else里然后退出了。
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&MessageBox.Show(&本程序只允许同时运行一个&);
&&&&&&&&&&&&&&&&ReleaseMutex(hMutex);
&&&&&&&&&&&&}
&&&&&&&&&&&&#endregion&&
&&&&&&&&&&&&&&&
我想问下,为什么会跳到这里?
Form2.cs&&&&&&&
&&&///&&summary&
&&&&&&&&///&要什么参数可以自己加
&&&&&&&&///&&/summary&
&&&&&&&&public&int&Result&{&&&}
&&&&&&&&///&&summary&
&&&&&&&&///&窗体2按钮单击关闭窗体
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name=&sender&&&/param&
&&&&&&&&///&&param&name=&e&&&/param&
&&&&&&&&private&void&button1_Click(object&sender,&EventArgs&e)
&&&&&&&&&&&&this.DialogResult&=&DialogResult.OK;
&&&&&&&&&&&&this.Close();
&&&&&///&&summary&
&&&&&&&&///&窗体1按钮点击弹出Form2窗体
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name=&sender&&&/param&
&&&&&&&&///&&param&name=&e&&&/param&
&&&&&&&&private&void&button1_Click(object&sender,&EventArgs&e)
&&&&&&&&&&&&Form2&f&=&new&Form2();
&&&&&&&&&&&&if&(f.ShowDialog()&==&DialogResult.OK)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&int&ret&=&f.R//可换成其它参数
&&&&&&&&&&&&}
单步调之后发现,在程序退出之前,程序跳到program.cs中的这段代码:
&&&&&&&&static&void&Main()
&&&&&&&&&&&&#region&Api_CallCreateM
&&&&&&&&&&&&IntPtr&hM
&&&&&&&&&&&&string&strAppName&=&System.Reflection.Assembly.GetExecutingAssembly().GetName().N
&&&&&&&&&&&
&&&&&&&&&&&&hMutex&=&CreateMutex(null,&true,&strAppName);
&&&&&&&&&&&&if&(GetLastError()&!=&ERROR_ALREADY_EXISTS)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Application.Run(new&Form1());
&&&&&&&&&&&&}
&&&&&&&&&&&&else&&//程序跳到这个else里然后退出了。
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&MessageBox.Show(&本程序只允许同时运行一个&);
&&&&&&&&&&&&&&&&ReleaseMutex(hMutex);
&&&&&&&&&&&&}
&&&&&&&&&&&&#endregion&&
&&&&&&&&&&&&&&&
我想问下,为什么会跳到这里?
那个是程序入口,退出的时候当然也会在那边出现了
至于为什么点击按钮会跳到那边,可能是BUG,或者是不是按钮事件发出程序退出命令了?有没那部分代码?
简单点弄个静态的
还是没有出来。。
可以用委托。。。
可以用委托。。。
悉听稍祥的解释。。谢谢
&&&&&&&&public&Inset(string&NAME)
&&&&&&&&&&&&InitializeComponent();
&&&&&&&&&&&&Name&=&NAME;
&Inset&inset&=&new&Inset(val);
&&&&&&&&&&&&inset.ShowDialog();
val你要带的参数、
form1传几个&&&from2接收几个
showDialog可以!
在form2里面定义一个委托&然后再form1里面实例化form2的时候给哪个委托赋一个方法&如下
//委托也是一个类,所以直接写在namespace下面即可
//类型可以根据你要传递的参数来定义,不必object
public&delegate&void&MyDelegate(object&parameter);
public&class&Form2:Form
&&&&MyDelegate&myD
&&&&//在关闭时间里面写
&&&&private&vodi&Form2_Closing(object&sender,EventArgs&e)
&&&&&&&&object&
&&&&&&&&/*其他要用的方法以及给para赋值*/
&&&&&&&&myDelegate(param);
然后再Form1里面实例化Form2的时候
Form2&frm=new&Form2();
frm.MyDelegate=MyF
然后在Form1.cs里面定义一个MyFunction方法:
private&void&MyFunction(objcet&param)
&&&&/*这里的param就是你Form2里面设置的参数了,然后可以自己处理*/
在公司&没有VS的环境&大概就是这样了,可能有点小问题&你试了再说哈。2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 winform关闭子窗体 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信