在登录表单上输入用户名和密码后,处理登录表单并显示主表单

本文关键字:表单 登录 处理 显示 输入 用户 密码 | 更新日期: 2023-09-27 18:36:58

我使用以下代码运行LoginForm:

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

当用户按下回车按钮时,我想释放或关闭登录表单并想要运行主窗体,但我得到这个异常:"用户代码未处理无效操作异常"

输入按钮的点击处理程序如下:

private void LoginFormEnterButton_Click(object sender, EventArgs e)
{
    try
    {
        MainForm a = new MainForm();
        a.Show();
        this.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

我该怎么做才能释放登录表单,然后成功运行主表单?

在登录表单上输入用户名和密码后,处理登录表单并显示主表单

您无法释放主窗口。你需要改变方式。

首先将 MainForm 设置为启动窗口。

Application.Run(new MainForm());

在 MainForm 的构造函数中加载/显示 LoginForm,

public MainForm()
{
 LoginForm login=new LoginForm();
 login.ShowDialog();
 InitializeComponent();
}

和单击登录表单中的处理程序代码,

private void LoginFormEnterButton_Click(object sender, EventArgs e)
{
   this.Close();
}

我认为主应用程序循环在关闭登录表单时结束。作为替代方案,您可以使用主窗体运行该应用程序,并让它将登录表单显示为模式对话框。然后,如果用户未成功登录,您可以关闭应用程序

我认为你应该改变你的方法。

开始运行主窗体。
在主窗体的 Load 事件中,以模式方式
运行登录窗体在登录表单中执行验证并返回 DialogResult.OK。
在主窗体中,继续或退出,具体取决于从登录窗体返回的内容。

[STAThread] 
static void Main() 
{     
    Application.EnableVisualStyles();     
    Application.SetCompatibleTextRenderingDefault(false);     
    Application.Run(new MainForm()); 
} 
public void MainForm_Load(object sender, EventArgs e)
{
     // The using statement will take care of closing and disposing the login form
     using(LoginForm f = new LoginForm())
     {
         if(f.ShowDialog() != DialogResult.OK)
         {
              Application.Exit();
              return;
         }
     }
     // continue with main form processing
}

我使用ApplicationContext而不是传递表单。

   Application.Run(new TerminalApplicationContext());

在CTOR中,我显示一个表格

public TerminalApplicationContext()
{
    login = new FormLogin();
    login.Logon += new FormLogin.LogonDelegate(login_Logon);
    login.Show();
}

然后在委托"login_logon"中,我处理"FormLogin"并显示另一个。