【解決方法】アプリケーションを非表示にして閉じずに、新しいフォームを開いて現在のフォームを閉じる


こんにちは皆さん、

新しいフォームを開いて現在のフォームを閉じるときは、通常、ShowDialog メソッドを使用して現在のフォームを非表示にし、新しいフォームを表示するだけです。

Form2 nextForm = new Form2();<br />
this.Hide();<br />
nextForm.ShowDialog();<br />
this.Close();

ただし、先日、ShowDialog を使用して実際に DialogResult を取得していたので、フォームを開いたり閉じたりするときに通常の show メソッドを使用しないのはなぜだと思いましたが、ShowDialog を Show に置き換えて同じコードを実行すると、アプリケーションは次のように閉じます。 form2 が開かれるとすぐに。

上記の showDialog メソッドを使用すると、別のフォームにつながるフォームがある場合、以前のフォームはすべてメモリ内に残り、パフォーマンスに何らかの影響を与えるという効果があると推測しています。

標準の Show メソッドを使用する際の問題に関しては、アプリケーションを閉じる理由は Form1 の close イベントに関係していることに気付きました。それが起動された場合、アプリケーション全体が閉じます。次のフォームですが、私はそれを100%理解していません.

誰かがこれを説明できれば、私は感謝します.

クリスピー先輩よろしく。

解決策 5

から派生した独自のクラスを作成できます。 ApplicationContext. そこには、好きなだけフォームを作成したり、フォームを追加および削除したりできます。フォームを閉じると、フォームの数が減ります。0 の場合は、呼び出します。 ExitThread();. program.cs では、呼び出しの代わりに Application.Run(new YourForm()); カスタム コンテキストのインスタンスを渡します。

解決策 1

SeniorCrispy さんが書きました:

Form2 nextForm = new Form2();
this.Hide();
nextForm.ShowDialog();
this.Close();

コードはこのように書かなければなりませんが、違いはありませんが、とにかくこの方法でフォームを隠すためのコードを常に書きます

Form2 obj = new Form2();
            obj.Show();
            this.Hide();

ダイアログを表示すると、form2 がモーダル ダイアログ ボックスとして設定されます

詳細なデータについては、このサイトを参照できます
ShowDialog()

this.Close() メソッドが呼び出されると、管理対象リソースを簡単に閉じることができますが、dispose() メソッドが呼び出されると、フォームがメモリから完全に削除されます。

役に立ったと思ったら、私の回答を評価してください

ありがとうございます。それでは、お元気で
基数:)

解決策 2

Show メソッドと ShowDialog メソッドの実際の違いや、プログラムが実際にどのように実行されるかを理解していないようです。

C# プログラムが開始されると、アプリケーションが最初に行うことは、メイン フォームであるフォームの新しいフォームを作成し、それを実行することです。 そのフォームが閉じられると、アプリケーションは終了します。 MSDN から: 「このメソッドは、Closed イベントの mainForm パラメーターにイベント ハンドラーを追加します。イベント ハンドラーは、ExitThread を呼び出して、アプリケーションをクリーンアップします。」

これは、メイン フォームが閉じられるたびに、その呼び出しの後に Program.cs に何もない限り、アプリケーションが閉じられることを意味します。

Show と ShowDialog の違いに関しては、ShowDialog は同じ基本的なことを行います。 そのコード行が実行されると、フォームが閉じて次のコード行が実行されるまで待機します。 だからあなたのコードで、

C#
Form2 nextForm = new Form2();
this.Hide();
nextForm.ShowDialog();
this.Close(); 

this.Close(); までは当たらない nextForm 閉じています。

SeniorCrispy さんが書きました:

以前のフォームはすべてメモリ内に残り、何らかのパフォーマンスへの影響があります。

それは本当だ。 フォームを閉じない場合でも、フォームはメモリ内に残ります。 ただし、メイン フォームを開いたままにしておく必要があります。そうしないと、アプリケーションが閉じます。 しかし、正直なところ、メイン フォームを開いたままにしておくことは、メモリの使用量としては非常に重要ではありません。

解決策 3

最初のフォームを閉じることが目的の場合は、次のことを試してください。

Application.Run(new MyNextForm());

解決策 4

SeniorCrispy さんが書きました:

誰かがこれを説明できれば、私は感謝します

この問題は正しく説明されていると思います。
それから

SeniorCrispy さんが書きました:

誰かが素晴らしい代替解決策を提供できれば。

Answer3 は次のように述べています。

Application.Run(new MyNextForm());

私はそうは思いません.私は彼がこのような状況を尋ねていることを支持します.form1でボタンを押すと、form2がポップアップし、form1が消えます. from1 は簡単な方法で消すことができます — form1.hide().しかし、form1 を閉じる必要があり、その後の操作はすべて form2 で行われる場合、この問題を解決するにはどうすればよいでしょうか? form1.close() を使用すると、このアプリケーションはメモリから終了しますが、form2 も消えてしまいます……

問題は、実際には form1 を閉じて (フォーム メモリを消去)、新しいフォームを開きます — form2 ですか? デモコードはもっと高く評価されます:-)

ps 私の英語は下手です。理解していただけると幸いです 😮

コメント

タイトルとURLをコピーしました