winform怎么在关闭一个窗体后显示另一个窗体? 把原来的窗体隐藏,把新的窗体表现出来 例如你现在打开的是Form1 还有一个窗体是Form2frm1.hide();form2 frm2=new from();frm2.show(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你想弄类似登录窗体和主界面的窗体,可以先加载主窗体,然后在主窗体的load事件里添加打开登录窗体,如果登录窗体成功继续加载后面代码,如果登录没满足要求就一直在登录窗体,或者程序退出 可以在Form的Closed事件里边写你的需要加载另外的窗体的逻辑 private Form2 f2; private Form3 f3; private void button1_Click(object sender, EventArgs e) { f2 = new Form2(); f2.Show(); } private void button2_Click(object sender, EventArgs e) { f3 = new Form3(); f2.Close();//关闭F2 f3.Show(); } frm1.hide(); form2 frm2=new from(); frm2.show(); 点解决方案资源管理,里面有个Program.cs类, 点开它,在Main方法里有这样一行代码 Application.Run(new Form1()); 这是一个系统的静态类Application的一个Run方法,为了实现程序第一个启动的的程序,里面写的 new Form1() 就是启动了一个Form1的对象,这也就是每次我们程序点调试时候会第一个弹出Form1窗口的原因。 为了实现你提到的问题,我们可以把Application.Run(new Form1()); 发放里的new Form1();给去掉,然后在其前面手动把Form1给Show出来;Program这个类的代码改成如下: using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsApplication1 { static class Program { /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 f1=new Form1(); f1.Show(); Application.Run(); } } } 这样就可以解决你说的问题了 不过this.Hide();是隐藏了这个窗口,而不是关闭; 我大一的时候做过一个类似的,不过我那时候没想到三楼的办法,我是添加了个主菜单新进程,然后登陆窗口那边的退出用的Application.ExitThread();退出当前线程上的所有消息循环,并结束当前线程上所有窗口,这样就不会发生你退出登陆窗口之后主菜单自动显示出来的事了,不过推荐三楼的做法 Form1改成要打开的窗体Thread ShowMainThread = new Thread(new ThreadStart(delegate { System.Windows.Forms.Application.Run(new Form1()); })); ShowMainThread.ApartmentState = ApartmentState.STA; ShowMainThread.Start();关闭当前窗体 this.Close(); this.Dispose(); static class Program { //直接上代码,不知道是否能实现你的要求 public static ApplicationContext AppContext; public static bool isClose = false; /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 frm = new Form1(); AppContext = new ApplicationContext(frm); AppContext.ThreadExit += new EventHandler(AppContext_ThreadExit); Application.Run(AppContext); } static void AppContext_ThreadExit(object sender, EventArgs e) { if (!Program.isClose) { Form2 frm = new Form2(); frm.FormClosed += new FormClosedEventHandler(frm_FormClosed); AppContext.MainForm = frm; frm.ShowDialog(); } } static void frm_FormClosed(object sender, FormClosedEventArgs e) { Program.isClose = true; } } 为C#烦恼啊,麻烦有经验的大哥支招 关于重写的问题 ☆★☆★ 如何将C#2005和VB6做的程序打包成一个安装程序? ☆★☆★☆★☆★ 问个有意思的问题 高分求学习ajax方法 帮个忙啊!实在不会了! vs2003,部署水晶报表的问题?错误提示:无法找到密钥号码 DLL 或密钥号码无效 请教 vs10x code map 和 code smart 里面的如何设置字体大小啊? ServerXMLHTTP.onreadystatechange 如何用C#设置 C#读取XML的问题 在usercontrol用户控件中动态加载控件 windows服务框架
private Form3 f3;
private void button1_Click(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
f3 = new Form3();
f2.Close();//关闭F2
f3.Show();
}
form2 frm2=new from();
frm2.show();
点开它,在Main方法里有这样一行代码 Application.Run(new Form1());
这是一个系统的静态类Application的一个Run方法,为了实现程序第一个启动的的程序,里面写的 new Form1()
就是启动了一个Form1的对象,这也就是每次我们程序点调试时候会第一个弹出Form1窗口的原因。 为了实现你提到的问题,我们可以把
Application.Run(new Form1());
发放里的new Form1();给去掉,
然后在其前面手动把Form1给Show出来;
Program这个类的代码改成如下:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsApplication1 {
static class Program {
/// /// 应用程序的主入口点。
/// [STAThread] static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 f1=new Form1();
f1.Show();
Application.Run();
}
}
}
这样就可以解决你说的问题了 不过this.Hide();是隐藏了这个窗口,而不是关闭;
Form1改成要打开的窗体
Thread ShowMainThread = new Thread(new ThreadStart(delegate { System.Windows.Forms.Application.Run(new Form1()); }));
ShowMainThread.ApartmentState = ApartmentState.STA;
ShowMainThread.Start();
关闭当前窗体
this.Close();
this.Dispose();
{
//直接上代码,不知道是否能实现你的要求
public static ApplicationContext AppContext;
public static bool isClose = false;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 frm = new Form1();
AppContext = new ApplicationContext(frm);
AppContext.ThreadExit += new EventHandler(AppContext_ThreadExit);
Application.Run(AppContext);
} static void AppContext_ThreadExit(object sender, EventArgs e)
{
if (!Program.isClose)
{
Form2 frm = new Form2();
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
AppContext.MainForm = frm;
frm.ShowDialog();
}
} static void frm_FormClosed(object sender, FormClosedEventArgs e)
{
Program.isClose = true;
}
}