winform在主窗体有一排按钮,其中有个按钮是登录窗口按钮,在点击登录按钮后弹出一个窗体A,在对A窗体进行信息填写后,点击A窗体上确认按钮进入窗体B,与此同时关闭窗体A,然后又得在B窗体上填写完信息后,点击确认进入窗体C,再关闭窗体B。。。在用this.Close()和this.Hide()方法时,出现的效果不是很理想(因为假如窗体B弹出时,窗体A时隐藏了,但是窗体B不是直接弹出来的,而是直接缩小化在电脑标题栏下面,还需要点击一下进行查看)。所以请高手指教该怎么做,本人菜鸟一枚。
------解决思路----------------------
Appcation.exit(this)
------解决思路----------------------
你可以把那些BCDE什么的都弄成MDI子窗体,嵌入主窗体中,都最大化显示,这样就不用老纠结这个弹出那个必须关闭什么的
------解决思路----------------------
或者登陆窗体不要隐藏,直接退出
打开主窗体用Application.Run(new Mainform());
这样两个窗体就不是同一个线程了,不会因为登陆窗体关闭导致弹出的窗体也关闭
------解决思路----------------------
问题的关键就是你拿什么作为主窗体
主窗体才能 Application.Run(new ??);
你如果只是 Application.Run(new FirstWindow()); 那你是自己给自己下套。
------解决思路----------------------
当然是登陆窗体打开主窗体的时候使用Application.Run了
本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了
使用Application.Run(new Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在
当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在
------解决思路----------------------
我就是在怀疑他没有这么干!我怀疑他把描述中的第一个启动的窗体放到了 Run 里面!
------解决思路----------------------
点A的确定按钮时:
Application.OpenForms[0].BeginInvoke((Action)(() => new B().ShowDialog()));
Close();
------解决思路----------------------
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Login login = new Login();
// FrmMain login = new FrmMain();
DialogResult loginDr = login.ShowDialog();
if (loginDr != DialogResult.OK)
return; //结束程序
Application.Run(new FrmMain());
}
}
我就是这么干的
------解决思路----------------------
Login 页面 登录成功 后
//登录成功
DialogResult = DialogResult.OK;
------解决思路----------------------
如果你还要回到A的话,就只能用this.Hide();
给你一个解决办法,你这个类似于向导类应用。
可以在一个窗体中放几个panel,每次要显示下一个panel时用panel.BringToFront()
------解决思路----------------------
panel可以隐藏啊,谁告诉你不能隐藏的
不过你最好还是换成tabcontrol之类的控件,否则布局起来相当麻烦,而且设计阶段看到的和运行阶段看到的会不一致
想给分,点结贴
------解决思路----------------------
点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B,不能先关闭B,然后自动从A上打开C吗,为何一定要先开C再关B