3

我使用以下代码运行 LoginForm:

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

当用户按下回车按钮时,我想处置或关闭 LoginForm 并想要运行 MainForm 但我得到了这个异常:“InvalidOperationException 未被用户代码处理”

Enter 按钮的单击处理程序如下所示:

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

我该怎么做才能处理 LoginForm 并成功运行 MainForm?

4

4 回答 4

2

您不能处置主窗口。你需要改变方式。

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

Application.Run(new MainForm());

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

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

并单击 LoginForm 中的处理程序代码,

private void LoginFormEnterButton_Click(object sender, EventArgs e)
{
   this.Close();
}
于 2012-06-12T12:53:53.027 回答
0

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

   Application.Run(new TerminalApplicationContext());

在 ctor 我显示一个表格

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

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

于 2012-06-12T13:01:13.600 回答
0

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

开始运行您的主窗体。
在主窗体的 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
}
于 2012-06-12T12:50:50.280 回答
0

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

于 2012-06-12T12:52:06.663 回答