1

フォームが表示される前に(Load()イベント、IIRC)イベントでログインフォームを表示することでフォームを乗っ取ることができることは知っていますが、(おそらくばかげて)「手抜き」してすばやく汚いログイン画面を作成しようとすると、ジレンマに遭遇しました。

これが私が既存のプロジェクトでしたことです(事後にログインフォームが追加されました):

1) Created the login form
2) Changed program.cs so that this login form is now the first form created
3) Added code to the login form that shows the "main" form if the login is successful. I then Hide the login form.

これにより、非表示のメインフォームがまだ潜んでいたため、アプリがシャットダウンすることはありませんでした(Shift + F5を使用する場合を除く)。そこで、「メイン」フォームのFormClosingイベントに「Close()」を追加しました。これにより、アプリ全体がシャットダウンする(IOW、非表示のログインフォーム)と考えました。

しかし(おそらく)、これは私の問題を解決するのではなく、「System.Windows.Forms.dllで「System.StackOverflowException」タイプの未処理の例外が発生しました」という原因になります。

今、私はこの迅速で汚い試みを続行するべきか(そしてどのように)、損失を減らして、show-the-login-form-in-the-Load-eventメソッド[ology]に戻るべきかわかりません。

アップデート

AlexMのソリューションは機能しました。あなたがする必要がある唯一の追加のことはあなたのログインフォームでこのようなものです:

private void buttonLogin_Click(object sender, EventArgs e)
{
    String userName = textBoxUserName.Text.Trim();
    String pwd = textBoxPassword.Text.Trim();
    if ((userName == "donMcLean") || (pwd == "Drove my Chevy to the levee but the levee was dry, them good ole boys were drinking whiskey & Rye"))
    {
        this.DialogResult = DialogResult.OK;
    }
    else
    {
        MessageBox.Show("Incorrect User Name and/or Password");
    }
}
4

1 に答える 1

5

作成順序は特に重要ではありません。を使用してログインフォームを表示できますform.ShowDialog()。そうすることで、フォームが破棄され、説明している問題に対処します。

例えば:

var login = new LoginForm();
var mainForm = new MainForm();

if (login.ShowDialog() != DialogResult.Ok) 
{
      return; // Exit the application
}

Application.Run(mainForm);
于 2012-06-29T20:27:03.770 に答える