3

ログインフォームを作成します。このフォームは、資格情報が正しい場合にメインフォームに進みます。基本的な擬似コードは次のとおりです。

ShowLoginForm()

if (DialogResult == OK)
  CheckCredentials();
  if (credentials == VALID)
    ShowMainForm();
  else
    LoopBackAndShowLoginFormAgain();  //repeat process...
else
  CloseLoginForm();

ただし、私はWinFormsに比較的慣れておらず、まだ理解しています。ループを配置する場所(Main()またはLoginFormのどこか)を決定しようとしています。クレデンシャルのチェックはどこで行う必要がありますか?これは私がこれまでに持っているものです:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    LoginForm loginForm = new LoginForm();
    if (loginForm.ShowDialog() == DialogResult.OK)
    {
        Application.Run(new AutoSignerForm());
    }
}

ログインフォームを繰り返し開いて終了したくない(ここで効率を求めているので、同じログインダイアログを使用したい)。ポインタ、ヒント、またはアイデアはありますか?

4

4 に答える 4

15

私は次のことをします:

  • Program.csで、loginFormをダイアログとして表示します

    LoginForm login_form = new LoginForm();
    if(login_form.ShowDialog() == DialogResult.OK) {
        Application.Run(new MainForm());
    }
    
  • LoginDialogで、[ログイン]ボタン(または名前が付けられているもの)のクリックイベントを処理します

    // replace with the actual login
    if(textBoxUsername.Text == "my user" && textBoxPassword.Text == "my pass") {
       // save the user has logged in somewhere
       // set the dialog result to ok
       this.DialogResult = DialogResult.OK;
       // close the dialog
       this.Close();
    } else {
       // login failed
       MessageBox.show("Login failed");
       // do not close the window
    }
    

これで、ユーザーが有効な資格情報を入力するか、ユーザーが試行をあきらめてアプリケーションを閉じるまで、LoginDialogが表示されたままになります。このようにすると、LoginFormのインスタンスは1つだけになり、優れたユーザーエクスペリエンスになります。また、ユーザーが正常にログインしないと、MainFormが初期化されて表示されないことを確認できます。

于 2012-06-21T15:08:17.267 に答える
2

これを試して

LoginForm loginForm = new LoginForm();     
do {
   if (loginForm.ShowDialog() == DialogResult.Cancel) {
       return; // Ends application
   }
} while (CheckCredentials() != VALID)
Application.Run(new AutoSignerForm());
于 2012-06-21T14:57:48.973 に答える
1

メインフォームを作成してから、ログインモーダルダイアログを表示してみませんか。次に、何をすべきかを確認できます。

于 2012-06-21T14:56:37.570 に答える
0

SubmitButtonイベントハンドラーでDialogResultをNoneに設定するのはどうですか?何かのようなもの:

private void loginButton_Click(object sender, EventArgs e)
{
    if (isValidCredentials())
      DialogResult = DialogResult.OK;
    else
    {
      MessageBox.Show("Failed to login or some other error");
      DialogResult = DialogResult.None;
    }
}
于 2012-06-21T15:19:24.307 に答える