1

2つのフォーム(mainlogin)があります。このコードでログインフォームを開きます。

toolStripProgressBar1.Value = 50;
toolStripStatusLabel_dynamic.Text = "Proberen toegang te verkrijgen...";
Login login = new Login();
login.ShowDialog();
do_login();

そして、ログインフォームの上部に次のeventhandlerようなツールストリップメニューがあります。

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) {
    Application.Exit();
}

ただし、両方のフォームを閉じた後も、プログラムは引き続き機能します(関数を呼び出しdo_loginます)。ただし、変数が設定されておらず、フォームがなくなっているため、do_loginまったく機能しません。

では、ツールストリップをクリックしたときにプログラムの実行全体を停止するにはどうすればよいですか?

4

5 に答える 5

4

の結果を確認してくださいShowDialog

using(var login = new Login()) {
    if(login.ShowDialog() == DialogResult.OK) {
        do_login();
    }
}

(これusingは、を使用する場合は呼び出す責任がありますが、 を呼び出す場合責任がないためです)Dispose()ShowDialog()Show()

于 2012-08-06T11:13:53.203 に答える
4

の定義は次のとおりであるため、回避する必要がApplication.Exit()あります。

すべてのメッセージ ポンプに終了する必要があることを通知し、メッセージの処理後にすべてのアプリケーション ウィンドウを閉じます。

つまり、すべてのメッセージが完全に処理されると終了しますが、ダイアログを閉じた後に処理する必要があるメッセージがあるため、最初にそれを終了する必要があります。適切に終了していますが、メソッド内にあるnullかどうかを確認して返す必要があります。nulldo_Login()

于 2012-08-06T11:14:17.873 に答える
3

マークの答えと組み合わせると、に変わりApplication.ExitますEnvironment.Exit(0)

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) { 
    Environment.Exit(0);
}
于 2012-08-06T11:21:55.297 に答える
2

Application.Exit(); を呼び出すとは思わない 終了するには良い方法です。1 つには、アプリケーションのシャットダウン時にクリーンアップするために配置された可能性のある他のコードの実行が許可されない場合があります。

代わりに、閉じる必要があることを示すために、Login から DialogResult を返す必要があります。次に、メイン フォームがこれを確認し、正常に終了する必要があります。

于 2012-08-06T11:18:16.327 に答える
1

これを試して。Environment.Exit(0);

于 2012-08-06T11:18:05.827 に答える