3

私はc#でプログラムを作成しました。これは、2種類のフォーム1がユーザーから値を取得してデータベースに保存し、2番目がCrystalReportのテンプレートにそれらの値を表示することを示しています。

私の問題は、最初のフォームを2番目のフォームに移動するときに、hide()を使用して最初のフォームを非表示にすることです。関数とデータベースから2番目のフォームの値を取得した後、1番目のフォームに戻り、2番目のフォームを非表示にして、1番目を表示しますが、プログラム全体を閉じると、プログラムは実行を続け、デバッガーはその実行を表示し、タスクマネージャーにもプロセスがあります。

form1を閉じてバックグラウンドプロセスを閉じる方法を知りたいです。英語が下手でごめんなさい。

      rollno = txtrollno.Text;
                    ReportCard objreport = new ReportCard();
                    objreport.Show();
                    this.Hide();

これは、最初のフォームを非表示にするためのコードです。

 Form1 objshow = new Form1();
        objshow.Show();
        this.Hide();

そしてこれで私は2番目を隠して1番目を再び表示します。

4

2 に答える 2

12

使ってみてください

Close();

フォームが閉じられると、オブジェクト内に作成されたすべてのリソースが閉じられ、フォームが破棄されます。Closingイベントを処理し、パラメーターとしてイベントハンドラーに渡されるCancelEventArgsのCancelプロパティを設定することにより、実行時にフォームが閉じられるのを防ぐことができます。閉じているフォームがアプリケーションのスタートアップフォームである場合、アプリケーションは終了します。

また

Application.Exit();

このメソッドは、すべてのスレッドで実行中のすべてのメッセージループを停止し、アプリケーションのすべてのウィンドウを閉じます。このメソッドは、アプリケーションを強制的に終了しません。Exitメソッドは通常、メッセージループ内から呼び出され、Runを強制的に返します。現在のスレッドのみのメッセージループを終了するには、ExitThreadを呼び出します。

また

Environment.Exit(exitCode)

このプロセスを終了し、基盤となるオペレーティングシステムに指定された終了コードを提供します。この呼び出しには、SecurityPermissionFlag.UnmanagedCode権限が必要です。そうしないと、SecurityExceptionエラーが発生します。これは、コンソールアプリケーションを実行している場合に使用する呼び出しです。

于 2012-10-10T14:02:44.803 に答える
1

したがって、プログラムを(正常に)終了するには、メインフォームを閉じる必要があります。プログラム全体を終了する前にそのフォームを「完了」しているので、現在はプログラムを閉じるのではなく、非表示にしているだけです(これは問題ありません)。あなたがする必要があるのは、2番目のフォームが閉じられたときにメインフォームが閉じられていることを確認することです。これは、イベントで行うのに十分簡単です。

Form1 objshow = new Form1();
objshow.Show();
this.Hide();
//Add this next line when you show the second form.
objshow.FormClosed += (_, args) => this.Close();
于 2012-10-10T14:13:31.870 に答える