1

我正在尝试使用 Windows 窗体在 C# 中制作一个简单的应用程序。

我的程序要求用户登录。我在主表单( Form1 )中有以下代码:

public partial class Form1 : Form
{
    UserClass user = new UserClass();
    public Form1()
    {
        InitializeComponent();
        while (! user.isLoggedIn())
        {
            loginForm login = new loginForm();
            login.ShowDialog();
        }
    }
}

可以看到,只要用户没有登录,用户就会看到loginForm.

我在其单击事件处理程序位于下方的表单上有一个取消按钮。

private void button2_Click(object sender, EventArgs e)
{
    Application.Exit();
}

这导致loginForm弹出和关闭的无限循环。

当用户单击取消时,我该怎么做才能摆脱无限循环并关闭应用程序?

有没有更好的方法来强制用户在启动程序后登录?

4

3 回答 3

2

请注意添加的行检查DialogResultloginForm. 如果用户点击,这将允许您break退出此循环Cancel,从而也允许Application.Exit()调用成功。

public partial class Form1 : Form
{
    private DialogResult _loginResult;

    UserClass user = new UserClass();
    public Form1()
    {
        InitializeComponent();
        while (! user.isLoggedIn())
        {
            loginForm login = new loginForm();
            _loginResult = login.ShowDialog();
            if (_loginResult == DialogResult.Cancel)
            {
                break;
            }
        }
    }

    protected override void OnShown(EventArgs e)
    {
        if (_loginResult == DialogResult.Cancel)
        {
            this.Close(); // which should shut down the app
        }
    }
}
于 2013-04-30T14:30:56.997 回答
1

这段代码:

     while (! user.isLoggedIn())
    {
        loginForm login = new loginForm();
        login.ShowDialog();
    }

表示如果用户未登录,则显示对话框,如果他们取消对话框(关闭而不登录),由于循环,它只会向他们显示一个新对话框。

为什么不将 while 循环更改为 if 语句?

于 2013-04-30T14:30:13.263 回答
0

尝试将新事物放在循环之外

loginForm login = new loginForm();

while (! user.isLoggedIn())
    {
        if (login.ShowDialog()==DialogResult.Cancel)
            {
              Close();
            }
    }
于 2013-04-30T14:53:36.273 回答