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

DialogResultから返されるをチェックする行が追加されていることに注意してくださいloginForm。これにより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 に答える