ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4028999 WindowsFormの消去について(C#)
質問者:nobil こんにちわ。

C#(WindowsForm)で以下のような処理を考えています。
1.起動するとForm1(ログイン画面)が開く
2−1.認証に成功 → 3へ
2−2.認証に失敗 → メッセージを表示し、ログイン画面のユーザ名にフォーカスをセット
3.Form3(メインメニュー)を開く

そこで、スタートアップの画面は、Form1で良いと思うのですが、
2−1の場合に、以下のようなコードを書いてみました。
***************************************
Form3 f = new Form3();
f.ShowDialog(this);
f.Dispose();

this.Close();
***************************************

これでは、次の部分で目的を達成できませんでした。
A.Form3をShowDaialog(this)で開くと、モーダルモードで開くだけとなってしまう。
Showではモードレスとなるだけ。

B.Dispose、Closeを記述してみたが、Form3が開いた時に、
画面上からForm1が消えるわけではない。
Closeでは、システム自体が終了してしまう。

そこで、ShowDialogやShowではなく、Form1を消し、Form3を表示するメソッド等あるのでしょうか?
ちなみに、Form3をCloseした場合に、Form1を再度呼び出す処理は考えていません。
困り度:
  • すぐに回答を!
質問投稿日時:
08/05/17 14:42
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 Form1をCloseしてしまうとプロジェクトの設定によってはアプリケーションが終了してしまいます

また、非表示にする前に設定されたデータなども全て失います
単に非表示にしたいのであれば
this.Hide();
で非表示しましょう
再表示するには this.Show(); で可能です

今回の場合なら ログイン用のForm1は モードレスでかまわないとも思います
2-1、2-2自体は Form1のなかで完結していればいいことだと思います


.NET Framework1.0/1.1なら Mainプロシージャを工夫してやらないといけないでしょう
.NET Framework2.0以降なら プロジェクトのプロパティの アプリケーションタブのシャットダウンモードを『最後のフォームが閉じたとき』にしてやればよさそうです
回答者:redfox63
種類:回答
どんな人:専門家
自信:参考意見
回答日時:
08/05/17 15:18
この回答へのお礼redfox63さん、回答ありがとうございます。

>また、非表示にする前に設定されたデータなども全て失います
>単に非表示にしたいのであれば
>this.Hide();
>で非表示しましょう
>再表示するには this.Show(); で可能です
Hide()とするのが良いのですね。
どうも、今まで、別言語でClose(に近い)とすると、
Form1がメモリから破棄されるようなイメージを持っていたので、
今回の件は不思議でした。

>2-1、2-2自体は Form1のなかで完結していればいいことだと思います
この点、ご指摘の通りです。

>.NET Framework2.0以降なら プロジェクトのプロパティの アプリケーションタブのシャットダウンモードを『最後のフォームが閉じたとき』にしてやればよさそうです
このプロパティも、初めて目にしました。
早速、やってみます。

ありがとうございます。