Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中的另一个窗体中打开新的窗口窗体#_C#_Winforms_Login_Mdi - Fatal编程技术网

C# 如何在c中的另一个窗体中打开新的窗口窗体#

C# 如何在c中的另一个窗体中打开新的窗口窗体#,c#,winforms,login,mdi,C#,Winforms,Login,Mdi,我用c#开发了一个windows窗体应用程序 它有两个表单,如登录表单和主表单。当我输入正确的登录凭据时,它应该关闭(而不是隐藏)登录表单并显示主表单 我使用了以下代码 MainForm main=new MainForm(); this.hide();//close login form main.show();//display main form 但是,当我使用mdi容器中的十字标记(右上角)关闭主窗体时,主窗体将关闭,但应用程序仍在任务管理器中运行 如果我使用下面的代码而不是前面的代码

我用c#开发了一个windows窗体应用程序

它有两个表单,如登录表单和主表单。当我输入正确的登录凭据时,它应该关闭(而不是隐藏)登录表单并显示主表单

我使用了以下代码

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容器,或者是否有任何方法可以实现这一点?请提供帮助。

应用程序仍在运行,因为您仍有一个表单处于活动状态,但处于隐藏状态

您可以在MainForm中订阅关闭事件,并通过application.exit()手动退出应用程序

另一个选项是确保LoginForm.Close事件的处理程序中只有一个窗口处于活动状态:open MainForm,如下所述:


您需要在关闭登录表单之前显示主表单。 试试这个:

main.show();//display main form
this.close()//close login form
试着这样做:

this.Hide();
Main.ShowDialog();
this.Close();
private void main_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}
首先,隐藏登录表单。 接下来,显示主窗体对话框,但在对话框关闭之前,阻止“ShowDialog()”的调用方继续。 最后,关闭对话框后,您将关闭登录表单,结束应用程序。

我通常做的是:

MainForm main=new MainForm();
Visible = false;
main.Show();
在主窗体中,我将form_closed事件处理程序设置为
Application.Exit()
像这样:

this.Hide();
Main.ShowDialog();
this.Close();
private void main_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

因此,当用户单击关闭主应用程序时,所有应用程序都会停止

我认为接受的答案在某种程度上是不正确的。这就是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);
        }
    }

你试过这个吗,。当我尝试此代码时,我的应用程序已关闭。Irshad请更正这个答案,你的答案是不正确的,因为当你从根窗体中显示另一个窗体,并关闭它根窗体时,它始终是闭孔应用程序。我同意这在某种程度上是OP想要的方式,但这是OP不想做的。他或她想关闭(而不是隐藏)登录表单。有关成功登录时关闭登录表单并启动主表单的方法,请参见下面的回答。