0

hereの提案に従って、プロジェクトの Main メソッドでログインフォームを次のように作成します。

[MTAThread]
static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += Unhandled;

    frmLogin loginForm = new frmLogin();
    if (loginForm.ShowDialog() != DialogResult.OK)
    {
        // If they hit "Close" just use the default values for now (for testing)
        HHSConsts.userName = "duckbilled";
        HHSConsts.pwd = "platypus";
        HHSConsts.currentSiteNum = "Packers20Seahawks19";
    }
    else
    {
        HHSConsts.userName = loginForm.UserName;
        HHSConsts.pwd = loginForm.Password;
        HHSConsts.currentSiteNum = loginForm.SiteNumber;
    }
    loginForm.Dispose();

    Application.Run(new frmMain());
}

ログイン フォームには、[OK] と [閉じる] の 2 つのボタンがあります。

private void buttonOK_Click(object sender, EventArgs e)
{
    HHSConsts.userName = textBoxUsername.Text.Trim();
    HHSConsts.pwd = textBoxPwd.Text.Trim();
    HHSConsts.currentSiteNum = listBoxSitesWithFetchedData.SelectedItem.ToString();
    // TODO: Prevent shutdown if "OK" is selected and there are any missing or bogus values?
    this.Close();
}

private void buttonClose_Click(object sender, EventArgs e)
{
    this.Close();
}

これはかなりうまく機能しますが、ログイン フォームが閉じてからメイン フォームが表示されるまでの間に明確な遅延があります。間隔があまり目立たないように、このギャップを埋める方法はありますか?

アップデート

これを置き換える:

Application.Run(new frmMain());

...これとともに:

Application.Run(new Form());

... Program.cs では、次のようになります。

ログイン フォームの [OK] ボタンをクリックすると、アプリが閉じます (メイン フォームは表示されません)。

ログイン フォームの [閉じる] ボタンをクリックすると、ログイン フォームのすべてのコントロールが消えますが、フォームはそのままです...?!?

4

1 に答える 1

1

できる限りメイン フォームをプリロードしてみてください。

[MTAThread]
static void Main()
{
  var mainForm = new frmMain();

  using(loginForm = new frmLogin())
  {
    if (loginForm.ShowDialog() != DialogResult.OK)
    {
      // If they hit "Close" just use the default values for now (for testing)
      HHSConsts.userName = "duckbilled";
      HHSConsts.pwd = "platypus";
      HHSConsts.currentSiteNum = "Packers20Seahawks19";
    }
    else
    {
      HHSConsts.userName = loginForm.UserName;
      HHSConsts.pwd = loginForm.Password;
      HHSConsts.currentSiteNum = loginForm.SiteNumber;
    }
  }

  mainForm.NotifyTheFormInstanceTheCredentialsHaveChangedIfItIsNotEventDrivenAlready();

  Application.Run(mainForm);
}
于 2015-01-12T22:05:47.773 に答える