如何在Program.cs里执行两个窗体?

crecrecre 2009-03-25 09:05:17
在Program里有两个窗体:一个LoginForm;一个MainForm;
在LoginForm里判断,如果登录成功,就执行MainForm, 否则就退出。
如果登录成功,在MainForm里有一个更换操作员模块,当它打开时,MainForm将退出,再执行更换操作员窗体。
在Program.cs里如何写代码?
...全文
657 1 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHENNIUBILE 2010-07-23
static void Main()
{
Form form3 = new Form();
Form form4 = new Form();


form3.Show();
form4.ShowDialog();

Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
回复
x343742249 2009-04-29
我想的是先由一个欢迎画面引导到登陆界面,登陆成功后就进入主窗体不成功就推出整个程序Program.cs类里写到这里该怎写了啊!!
[STAThread]
static void Main()
{
login Login=new login();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if(Login.ShowDialog()==DialogResult.Yes)
{
main mymain = new main();
mymain.UserInfo=Login.UserInfo()
Application.Run(new main());
}

}
回复
crecrecre 2009-03-30
[Quote=引用 17 楼 Roc_Lee 的回复:]
就用正常的方法来就行。run一个new program
[/Quote]

能给写一段代码?
从主窗体再打开登录窗体时,如何释放主窗体?
回复
Roc_Lee 2009-03-30
就用正常的方法来就行。run一个new program
回复
crecrecre 2009-03-30
[Quote=引用 15 楼 liu4545533 的回复:]
在mainform里面直接写就可以啦
[/Quote]

怎么写?
不想用visible或hide方法。
是想在打开主窗体时,将登录窗体释放掉。
打开登录窗体时,将主窗体释放掉。
回复
liu4545533 2009-03-29
在mainform里面直接写就可以啦

回复
xiaolukatie 2009-03-27
[Quote=引用 6 楼 crecrecre 的回复:]
引用 4 楼 xiaolukatie 的回复:
C# code
[STAThread]
static void Main()
{
Application.Run(new frmLogin()); //运行登陆窗体
if(isLogined) //登陆成功标志
{
isLogined = false;
Application.Run(new frmMain(ds)); //运行主窗体
if(frmMain.isReLogin) //判断是…
[/Quote]


ds是因为我frmmain构造函数有传dataset你可以不管的
main函数没有是因为我把main函数提到frmlogin中去
你可以直接调用pragram里面的
回复
crecrecre 2009-03-27
[Quote=引用 13 楼 xiaolukatie 的回复:]
ds是因为我frmmain构造函数有传dataset你可以不管的
main函数没有是因为我把main函数提到frmlogin中去
你可以直接调用pragram里面的
[/Quote]

你好,xiaolukatie
我从主窗体再打开登录窗体时出错;

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmLogin());
if (connectionDB.DengLu)
{
connectionDB.DengLu = false;
Application.Run(new StoreManage());
if (StoreManage.isRLoad)
{
StoreManage.isRLoad = false;
Program.Main();
}
}
}

connectionDB是一个类,DengLu是一个字段;登录成功DengLu字段为true;否则为flase;
在主窗体StoreManage里创建了一个isRLoad字段;
你看是哪个地方出问题了?
回复
crecrecre 2009-03-26
[Quote=引用 10 楼 ppyyhh 的回复:]
myFrmMain.Userinfo = myFrmLogin.Userinfo这句是登陆窗体和主窗体之间传递数据的一个实体变量,需要的话你可以在两个窗体中分别定义。传递你登陆的用户的信息。对于传统的C#编程,一般不会调用VB.NET的东西,所以一般不考虑引入Microsoft.VisualBasic.
[/Quote]

要是再从主窗体打开登录窗体,并关闭主窗体,应该怎么做?
回复
xiaoyuzi 2009-03-26
Application.Run(new Form1());如果这个form1被dispose了,整个程序就退出了。如果要使用多个form,可以按下面方法来做,
1. 建立一个StartForm,
private void StartForm_Closing(object sender, CancelEventArgs e)
{
// The start form can't be closed, or else the application will quit.
e.Cancel = true;
this.Visible = false;
}

private void StartForm_GotFocus(object sender, EventArgs e)
{
// Redirect to other form
LoginForm frm = new LoginForm();
frm.Show();
this.Close();
}
2. main函数里改为
Application.Run(new StartForm());
3.然后LoginForm里login事件里头
if( login succeed )
{
MainForm frm = new MainForm();
frm.show();
this.close();
}
else
{
application.Exit();
}
回复
xiaolukatie 2009-03-25

[STAThread]
static void Main()
{
Application.Run(new frmLogin()); //运行登陆窗体
if(isLogined) //登陆成功标志
{
isLogined = false;
Application.Run(new frmMain(ds)); //运行主窗体
if(frmMain.isReLogin) //判断是否是重新登陆
{
frmMain.isReLogin = false;
frmLogin.Main(); //重新运行主函数
}
}
}


//在登陆成功时,记得close掉登陆窗体,并且把isLogined = true
//同样,在点重新登陆时,记得把主窗体close掉,同时设置isReLogin = true
回复
zgke 2009-03-25

[STAThread]
static void Main(string[] arg)
{

Form1 _Form1 = new Form1();
if (_Form1.ShowDialog() == DialogResult.OK)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}

}

回复
occam 2009-03-25
if (loginform.showdialog() == dialogresult.ok && mainform.showdialog() == dialogresult.ok)
application.run(new opform());

试试
回复
booker 2009-03-25
为什幺在Program.cs中写呢?你这个需求完全可以在MainForm中实现。
回复
ppyyhh 2009-03-25
myFrmMain.Userinfo = myFrmLogin.Userinfo这句是登陆窗体和主窗体之间传递数据的一个实体变量,需要的话你可以在两个窗体中分别定义。传递你登陆的用户的信息。对于传统的C#编程,一般不会调用VB.NET的东西,所以一般不考虑引入Microsoft.VisualBasic.
回复
南哥1207 2009-03-25
[Quote=引用 7 楼 ppyyhh 的回复:]
通常program.cs都这么写:
frmLogin myFrmLogin = new frmLogin(); //formLogin为登陆窗体,

if (myFrmLogin.ShowDialog() == DialogResult.Yes)
{
frmMain myFrmMain = new frmMain(); //frmMain为主窗体
myFrmMain.Userinfo = myFrmLogin.Userinfo;
Application.Run(myFrmMain);
}

你设计好窗体运行…
[/Quote]
就这样~
回复
heyu52 2009-03-25
我认为7楼的想法所有中最好的了,但是你也是想多了
为什么不直接用微软本身的类呢
微软的winform一早就解决了这个问题,只要你往里面填参数就可以了

我们能想到的,微软件早帮我们弄好了,你查看


Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase这个类

只要你往里面填参数就可以了
回复
ppyyhh 2009-03-25
通常program.cs都这么写:
frmLogin myFrmLogin = new frmLogin(); //formLogin为登陆窗体,

if (myFrmLogin.ShowDialog() == DialogResult.Yes)
{
frmMain myFrmMain = new frmMain(); //frmMain为主窗体
myFrmMain.Userinfo = myFrmLogin.Userinfo;
Application.Run(myFrmMain);
}

你设计好窗体运行后,首先执行program.cs里的代码,实例化登陆窗体,当程序到if这个判断的时候,先出来的是myFrmLogin.ShowDialog()的效果,也就是登陆窗体打开,在你的登陆窗体中进行登陆身份验证,通过验证则在登陆窗体代码后面加上:this.DialogResult = DialogResult.Yes,意思是让登陆窗体关闭;这句代码一生效,则程序会转回上面的if条件,判断是不是登陆窗体关闭了,也就是myFrmLogin.ShowDialog() == DialogResult.Yes是否成立,如果成立,则实例化主窗体,然后打开主窗体。
回复
crecrecre 2009-03-25
[Quote=引用 4 楼 xiaolukatie 的回复:]
C# code
[STAThread]
static void Main()
{
Application.Run(new frmLogin()); //运行登陆窗体
if(isLogined) //登陆成功标志
{
isLogined = false;
Application.Run(new frmMain(ds)); //运行主窗体
if(frmMain.isReLogin) //判断是否是重新登陆
{

[/Quote]

Application.Run(new frmMain(ds));
‘ds’是什么作用?

frmLogin.Main();
Main()方法没显示出来,不知应该怎么用?
回复
crecrecre 2009-03-25
[Quote=引用 1 楼 booker 的回复:]
为什幺在Program.cs中写呢?你这个需求完全可以在MainForm中实现。
[/Quote]

在MainForm中如何实现?
我是想让登录窗体在登录成功后释放掉;而不是隐藏。
同样,在主窗体点击更换操作员的窗体打开后也释放掉,再显示登录窗体。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.