DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームの遷移方法

環境/言語:[C# 4.0]
分類:[.NET]

フォームの遷移ですが、皆さんはどのように実装されているのでしょうか。

例えば、Form1のボタンを押下する事で
Form1を非表示にしてForm2を表示する。
Form2を閉じるForm2を非表示にしてForm1を表示する。

というようなものを作成する場合、それぞれのフォームに参照を持つと
Form1にForm2の参照
Form2にForm1の参照(外部からForm1の参照を取得)
という風になってしまい、あまり綺麗ではないような気がします。

以下のようなクラスを作成してみましたが・・・皆さんはどのように実装されているのでしょうか。
class FormManager {

private Form1 form1;

private Form2 form2;

public Form1 Form1 { get { return form1; } }

public FormManager() {
form1 = new Form1();
form2 = new Form2();

form1.button1.Click += (sender, args) => {
form2.Show();
form1.Visible = false;
};

form2.FormClosing += (sender, args) => {
form2.Visible = false;
form1.Show();
args.Cancel = true;
};
}
}
  • 題名: Re[1]: フォームの遷移方法
  • 著者: shu
  • 日時: 2011/12/27 12:29:10
  • ID: 29526
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No29525に返信(ぽっぽさんの記事)

この場合Form1からForm2を表示するだけでForm2からForm1は表示しないようなので
Form1にForm2のインスタンスをもっておいてForm2がとじられたときに自身をShowすればよいかと思います。提示されたコードをForm1内に写し最適化するとそうなるかと思います。
■No29525に返信(ぽっぽさんの記事)
> どのように実装されているのでしょうか。
> class FormManager {
ApplicationContext 継承クラスでフォームを管理しています。

# Visual Basic を使っているのであれば、「シャットダウンモード」の設定を
# 「最後のフォームが閉じるとき」に変更するという手もあるのですけれども。
>この場合Form1からForm2を表示するだけでForm2からForm1は表示しないようなので

以下のような時の場合です。説明下手ですみません。。
Form1
 ボタンが押下されるとForm1を非表示にしてForm2を表示する。

Form2
 Form2が閉じられようとすると、Form2を非表示にしてForm1を表示する。


>ApplicationContext 継承クラスでフォームを管理しています。
ありがとうございます。これから調べてみます。
■No29528に返信(ぽっぽさんの記事)

こんな感じです。Disposeの処理もあったほうがよいですね。
もしぽっぽさんが作られたクラスを使うならForm1,Form2の型
情報が固定であることやbutton1のクリック固定であることから汎用性が
ないのでその辺を解決する必要があると思います。

    public partial class Form1 : Form
    {
        private Form2 form2;

        public Form1()
        {
            InitializeComponent();
            form2 = new Form2();

            button1.Click += (sender,e) => {
                form2.Show();
                this.Hide();
            };

            form2.FormClosing += (sender, e) =>
            {
                this.Show();
                form2.Hide();
                e.Cancel = true;
            };
        }
    }
■No29528に返信(ぽっぽさんの記事)
> >ApplicationContext 継承クラスでフォームを管理しています。
> ありがとうございます。これから調べてみます。

すでに見られているかもしれませんが、このサイト内にありますよ−。
http://dobon.net/vb/dotnet/form/showforminsequence.html
ありがとうございます。

色々と勉強しないといけない部分があるようです。

勉強し直してから、またご質問させていただこうかと思います。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板