1

在我的项目中,有两种形式frmLoginfrmMain. 成功登录后,frmLoginfrmMain通过执行以下操作向用户显示表单:

frmLogin表单button_click事件中:

frmMain main = new frmMain();
main.Show();
this.Hide();

frmMain用户注销时,我想显示相同的frmLogin表单(而不是实例)。这该怎么做?

我试过这段代码:(创建另一个我不想要的实例frmLogin

frmMain表单button_click事件中:

if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
{
    this.FormClosing -= frmMain_FormClosing;
    //
    Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.Start();
    //
    this.Dispose();
}

我也尝试过使用internal说明符但没有用。

编辑:作为实习生,我不允许使用Static关键字和更改program.cs. 如果上述方法需要受限制的方法(我已经提到过),那么请建议我另一种方法。

4

4 回答 4

4

将 frmLogin 引用传递给 frmMain。然后,就在你处理 frmMain 之前,显示 frmLogin。

frmMain main = new frmMain();
main.LoginForm = this;
main.Show();
this.Hide();

然后在按钮单击事件中:

if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
{
    this.FormClosing -= frmMain_FormClosing;
    LoginForm.Show();
    this.Dispose();
}
于 2012-11-05T05:34:35.543 回答
3

您所要做的就是将登录页面指定为owner of nextform to be opened

在您要打开 nextForm 的登录页面调用以下函数

void openNextForm()
{
    Form f2 = new YourForm();    
    f2.owner=this;
    f2.Show();
    this.Hide();
}

在你的 nextForm(例如 mainForm)中写下你的按钮点击

void ButtonLogOut_Click(object sender, EventArgs e)
{
     this.Owner.Show();
     this.Hide();
     this.Dispose();
}
于 2012-11-05T06:13:35.693 回答
1

我认为处理多个表单时最简洁的方法是在 Program.cs 中创建它们,并保留所有管理它们的方法,然后从事件处理程序中调用这些方法。有点像这样:

static class Program
{
    public static MainForm mainForm = new MainForm();
    public static LoginForm loginForm = new LoginForm();

    [STAThread]
    static void Main()
    {
        mainForm.Hide();
        loginForm.Hide();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(loginForm);
    }

    public static void Login()
    {
        loginForm.Hide();
        mainForm.Show();
        // probably do more here
    }

    public static void Logout()
    {
        if (MessageBox.Show("Do you really want to log out?", "Alert", MessageBoxButtons.YesNo).Equals(DialogResult.Yes)))
        {
            mainForm.Hide();
            loginForm.Show();
            // probably do more here
        } 
    }
}

然后在事件处理程序中,您只需调用 Program.Login() 或 Program.Logout()

于 2012-11-05T05:41:51.913 回答
1

我不明白你为什么不使用 ShowDialog() 方法?

 frmMain main = new frmMain();
 this.Hide();
 main.ShowDialog();
 this.Show();

登录表单将被隐藏,主表单关闭后,登录表单将继续执行并自动显示...

于 2012-11-05T06:15:01.570 回答