我使用c#开发了一个Windows窗体应用程序。
它有2种形式,如登录表单和主表单。当我输入正确的登录凭据时,它应关闭(不隐藏)登录表单并显示主表单。
我使用了以下代码
MainForm main=new MainForm();
this.hide();//close login form
main.show();//display main form
但是当我使用mdi容器中的十字标记(右上角)关闭主窗体时,主窗体关闭但应用程序仍在任务管理器中运行。
如果我使用以下代码而不是之前的代码,应用程序将在主窗体显示之前关闭。
this.close()//close login form
main.show();//display main form
我是否必须从主窗体中隐藏mdi容器,或者有什么方法可以实现这一点?请帮忙。
答案 0 :(得分:5)
试试这样:
this.Hide();
Main.ShowDialog();
this.Close();
首先,隐藏登录表单。 接下来,显示“主窗体”对话框,但阻止“ShowDialog()”的调用者继续,直到关闭对话框。 最后,关闭对话框后,关闭登录表单,结束应用程序。
答案 1 :(得分:1)
应用程序仍在运行,因为您仍然有一个仍处于活动但隐藏的表单。
您可以在 MainForm 中订阅关闭事件,并通过 Application.Exit()手动退出应用程序。
另一个选择是确保只有一个窗口存活:在 LoginForm.Close 事件的处理程序中打开 MainForm ,如下所述:Windows Forms: Change application mainwindow at runtime
MyForm1 f = new MyForm1();
f.Close += OnOpenOverviewWin();
Application.ShutdownMode = ShutdownMode.OnLastWindowClose;
Application.Run(f);
void OnOpenOverviewWin()
{
if (loginok)
{
MyOverViewForm f = new MyOverViewForm ();
f.Show();
}
}
答案 2 :(得分:0)
您需要在关闭登录表单之前显示主表单。 试试这个:
main.show();//display main form
this.close()//close login form
答案 3 :(得分:0)
我一直在做的是:
MainForm main=new MainForm();
Visible = false;
main.Show();
在我的主窗体中,我将form_closed事件处理程序设置为Application.Exit();
像这样:
private void main_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
所以当用户点击关闭主要的所有应用程序停止
答案 4 :(得分:0)
我认为接受的答案在某种程度上是不正确的。这是OP正在寻找的实际答案。对不起,需要一年的时间才能得到解答。在项目的Program.cs文件中的Main()方法内部,复制并粘贴以下内容:
Logon logonForm = new Logon();
if(logonForm.ShowDialog() == DialogResult.OK)
{
Application.Run(new Portal());
}
当用户通过身份验证或成功登录事件时,在logonForm内部设置表单的DialogResult = DialogResult.OK以下是此示例:
private void logonButton_Click(object sender, EventArgs e)
{
string username = usernameTextBox.Text;
string password = passwordTextBox.Text;
if(logon(username, password))
{
MessageBox.Show("Logged On Successfully!", "Success",
MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
else
{
MessageBox.Show(getFailureReason(), "Failure",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}