C#编程时,经常会遇到处理两个或多个窗口的问题。以登录窗口为例,当登录窗口登录验证成功后,要进入主窗口,此时需要关闭登录窗口,这时候用this.close()是不可以的。因为Program.cs中
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Main 函数是程序的入口点,当你在Form1中调用this.close ()的时候,Application.Run(new Form1())中Form1就会结束,也就是说整个程序结束了,此时主窗口也会相应的关闭,这不是我们想看到的。下面有两种方法来只关闭登录窗口,而主窗口仍然运行。
1. 先隐藏登录窗口, 然后在主窗口关闭后将登录窗口关闭
这种方法只是把登录窗口隐藏了,主程序还在运行。实现方法为:
登录窗口代码:
if (user.CheckIn())
{
MainForm myform = new MainForm(this); //调用带参的构造函数
myform.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误");
}
登录成功后,通过构造函数传入登录窗口的参数到主窗口,这样在主窗口里可以直接对登录窗口操作
Form1 loginform = null;
// 在主窗口添加带参的构造函数
public MainForm(Form1 myform)
{
this.loginform = myform;
InitializeComponent();
}
主窗口关闭后,关闭登录窗口
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
loginform.Close();
}
2. 将主窗口程序设为主运行程序,
修改Program.cs
Application.Run(new MainForm());
这样系统启动时,运行的是主窗口程序。然后在主窗口加载时去调用登录窗口就可以了。
private void MainForm_Load(object sender, EventArgs e)
{
Form1 form = new Form1();
form.ShowDialog();
this.Close();
}
登录窗口代码为:
if (user.CheckIn())
{
this.Close();
}
else
{
MessageBox.Show("用户名或密码错误");
}