Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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语言中的两种不同windows窗体#_C#_Winforms_Login_Screen - Fatal编程技术网

C# C语言中的两种不同windows窗体#

C# C语言中的两种不同windows窗体#,c#,winforms,login,screen,C#,Winforms,Login,Screen,我不熟悉C#和.NET编程。我想设计一个应用程序,打开一个小的登录屏幕,当用户按下“登录”按钮时,我的程序应该关闭登录表单并传递到一个新表单。如何实现这个简单的过程 谢谢。这可能是一个解决方案 在LoginForm中 public bool IsLoggedIn { get; private set;} public void LoginButton_Click(object sender, EventArgs e) { IsLoggedIn = DoLogin(); if(IsLogg

我不熟悉C#和.NET编程。我想设计一个应用程序,打开一个小的登录屏幕,当用户按下“登录”按钮时,我的程序应该关闭登录表单并传递到一个新表单。如何实现这个简单的过程


谢谢。

这可能是一个解决方案

在LoginForm中

public bool IsLoggedIn { get; private set;}
public void LoginButton_Click(object sender, EventArgs e)
{
  IsLoggedIn = DoLogin();
  if(IsLoggedIn)
  {
    this.Close()
  }
  else
  {
    DoSomethingElse();
  }
}
在program.cs中

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  LoginForm loginForm = new LoginForm();
  Application.Run(loginForm);
  if (loginForm.IsLoggedIn)
  {
    Application.Run(new OtherForm());
  }
}

这里的挑战是传递给Application.Run()方法的表单。如果您使用登录表单的实例启动应用程序,然后关闭该表单,我相信应用程序将退出。毫无疑问,有几种方法可以解决这个问题

一种方法是将主窗体的实例传递给Application.Run方法(这将消息循环绑定到该窗体实例,而不是登录窗体)。在主窗体的OnLoad方法中,可以使用模式对话框执行登录。i、 e

//--Main form's OnLoad method
protected override void OnLoad(EventArgs ea)
{
    // Remember to call base implementation
    base.OnLoad(ea);

    using( frmLogin frm = new frmLogin() )
    {
        if( frm.ShowDialog() != DialogResult.OK )
        {
            //--login failed - exit the application
            Application.Exit();
        }
    }       
}

根据应用程序的总体架构,我通常喜欢让主窗体控制启动登录屏幕

    //Program.cs:
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }

    //MainForm.cs
    private void MainForm_Load(object sender, EventArgs e)
    {
        this.Hide();
        Login login = new Login();
        if (login.ShowDialog() == DialogResult.OK)
        {
            //make assignments from login
            currentUser = login.User;
        }
        else
        {
            //take needed action
            Application.Exit();
            return;
        }
    }

如果确实使用.ShowDialog(),请不要忘记将其包装在using块周围,或者在完成后在登录表单上使用.Dispose。必须手动处理模型对话框。

如果登录失败,为什么必须退出应用程序?无法登录时浏览器或选项卡是否关闭?您可以在“项目设置”中设置退出行为,以便在关闭所有表单时关闭浏览器或选项卡。您不必退出。这只是一种方法的一个例子。项目设置退出行为。。。酷。没注意到。