3

c# を使用して Windows フォーム アプリケーションを開発しました。

ログインフォームとメインフォームの2つのフォームがあります。正しいログイン資格情報を入力すると、ログイン フォームが閉じられ (非表示ではなく)、メイン フォームが表示されます。

私は次のコードを使用しました

MainForm main=new MainForm();
this.hide();//close login form
main.show();//display main form

しかし、mdi コンテナーのクロス マーク (右上隅) を使用してメイン フォームを閉じると、メイン フォームは閉じますが、タスク マネージャーでアプリケーションがまだ実行されています。

前のコードの代わりに次のコードを使用すると、メイン フォームが表示される前にアプリケーションが終了します。

this.close()//close login form
main.show();//display main form

メイン フォームから mdi コンテナーを非表示にする必要がありますか、またはこれを実現する方法はありますか? 助けてください。

4

5 に答える 5

5

このようにしてみてください:

this.Hide();
Main.ShowDialog();
this.Close();

まず、ログイン フォームを非表示にします。次に、メイン フォーム ダイアログを表示しますが、ダイアログが閉じられるまで "ShowDialog()" の呼び出し元が続行しないようにします。最後に、ダイアログが閉じたら、ログイン フォームを閉じて、アプリケーションを終了します。

于 2013-06-11T11:16:59.367 に答える
1

まだ生きているが非表示になっているフォームが 1 つあるため、アプリケーションはまだ実行されています。

MainFormでCloseイベントをサブスクライブし、Application.Exit()を介してアプリケーションを手動で終了できます。

もう 1 つのオプションは、アクティブなウィンドウが 1 つだけであることを確認することです。ここで説明されているように、 LoginForm.CloseイベントのハンドラーでMainFormを開きます: Windows フォーム: 実行時にアプリケーションのメインウィンドウを変更する

MyForm1 f = new MyForm1();
f.Close += OnOpenOverviewWin();
Application.ShutdownMode = ShutdownMode.OnLastWindowClose;
Application.Run(f);

void OnOpenOverviewWin()
{
  if (loginok)
  {
    MyOverViewForm f = new MyOverViewForm ();
    f.Show();
  }
}
于 2013-06-11T10:11:22.377 に答える
0

受け入れられた答えはある程度間違っていると思います。これは、OPが探していた実際の答えです。回答が得られるまでに 1 年かかりました。プロジェクトの Program.cs ファイルの Main() メソッド内で、以下をコピーして下部に貼り付けます。

        Logon logonForm = new Logon();
        if(logonForm.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Portal());             
        }

ユーザーが認証されたとき、またはログイン イベントが成功したときに、logonForm 内でフォームの DialogResult = DialogResult.OK を設定します。この例を次に示します。

    private void logonButton_Click(object sender, EventArgs e)
    {
        string username = usernameTextBox.Text;
        string password = passwordTextBox.Text;

        if(logon(username, password))
        {
            MessageBox.Show("Logged On Successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        else
        {
            MessageBox.Show(getFailureReason(), "Failure",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
于 2015-01-09T20:28:13.980 に答える