繁体   English   中英

如何在c#中的另一个表单中打开一个新窗口表单

[英]How to open a new window form within another form in c#

我用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容器,或者有任何方法可以实现此目的吗? 请帮忙。

试试这样:

this.Hide();
Main.ShowDialog();
this.Close();

首先,隐藏登录表单。 接下来,显示“主窗体”对话框,但阻止“ShowDialog()”的调用者继续,直到关闭对话框。 最后,关闭对话框后,关闭登录表单,结束应用程序。

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

您可以在MainForm中订阅Close事件,并通过Application.Exit()手动退出应用程序

另一种选择是确保只有一个窗口存活:在LoginForm.Close事件的处理程序中打开MainForm ,如下所述: Windows窗体:在运行时更改应用程序主窗口

MyForm1 f = new MyForm1();
f.Close += OnOpenOverviewWin();
Application.ShutdownMode = ShutdownMode.OnLastWindowClose;
Application.Run(f);

void OnOpenOverviewWin()
{
  if (loginok)
  {
    MyOverViewForm f = new MyOverViewForm ();
    f.Show();
  }
}

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

main.show();//display main form
this.close()//close login form

我一直在做的是:

MainForm main=new MainForm();
Visible = false;
main.Show();

在我的主窗体中,我将form_closed事件处理程序设置为Application.Exit(); 像这样:

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);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM