在我的项目中,有frmLogin
和frmMain
两种形式。从frmLogin
成功登录后,我通过执行以下操作向用户显示frmMain
表单:
frmLogin
表单button_click
事件:
frmMain main = new frmMain();
main.Show();
this.Hide();
在frmMain
用户注销时,我想显示相同的frmLogin
表单(不是实例)。怎么做?
我尝试了这段代码:(创建另一个我不想要的frmLogin
实例)
frmMain
表单button_click
事件:
if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
{
this.FormClosing -= frmMain_FormClosing;
//
Process p = new Process();
p.StartInfo.FileName = Application.ExecutablePath;
p.Start();
//
this.Dispose();
}
我也尝试使用internal
说明符,但没有用。
编辑:作为受训者,我不得使用Static
关键字并更改program.cs
。如果上述方法需要限制性方法(我已经提到过),那么请建议我采用另一种方法。
答案 0 :(得分:4)
将frmLogin引用传递给frmMain。然后,在你处理frmMain之前,显示frmLogin。
frmMain main = new frmMain();
main.LoginForm = this;
main.Show();
this.Hide();
然后在按钮点击事件中:
if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
{
this.FormClosing -= frmMain_FormClosing;
LoginForm.Show();
this.Dispose();
}
答案 1 :(得分:3)
您需要做的就是将登录页面指定为owner of nextform to be opened
在您要打开nextForm的函数的登录页面调用中
void openNextForm()
{
Form f2 = new YourForm();
f2.owner=this;
f2.Show();
this.Hide();
}
在你的nextForm(例如mainForm)中,按下按钮点击
void ButtonLogOut_Click(object sender, EventArgs e)
{
this.Owner.Show();
this.Hide();
this.Dispose();
}
答案 2 :(得分:1)
我认为处理多个表单时最干净的方法是在Program.cs中创建它们,并保留所有方法来管理它们,然后从事件处理程序调用这些方法。有点像这样:
static class Program
{
public static MainForm mainForm = new MainForm();
public static LoginForm loginForm = new LoginForm();
[STAThread]
static void Main()
{
mainForm.Hide();
loginForm.Hide();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(loginForm);
}
public static void Login()
{
loginForm.Hide();
mainForm.Show();
// probably do more here
}
public static void Logout()
{
if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes)))
{
mainForm.Hide();
loginForm.Show();
// probably do more here
}
}
}
然后在事件处理程序中,您可以调用Program.Login()或Program.Logout()
答案 3 :(得分:1)
我不明白为什么你不使用ShowDialog()方法?
frmMain main = new frmMain();
this.Hide();
main.ShowDialog();
this.Show();
登录表单将被隐藏,在主表单关闭后,登录表单的执行将继续,并将自动显示...