電子書籍の厳選無料作品が豊富!

こんにちわ。

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を再度呼び出す処理は考えていません。

A 回答 (1件)

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



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

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


.NET Framework1.0/1.1なら Mainプロシージャを工夫してやらないといけないでしょう
.NET Framework2.0以降なら プロジェクトのプロパティの アプリケーションタブのシャットダウンモードを『最後のフォームが閉じたとき』にしてやればよさそうです
    • good
    • 0
この回答へのお礼

redfox63さん、回答ありがとうございます。

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

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

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

ありがとうございます。

お礼日時:2008/05/19 08:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!