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

ユーザーコントロールを使用した画面遷移

環境/言語:[WindowsXP Pro SP2 / C#2005]
分類:[.NET]

はじめまして。
C# & クラスの概念 & オブジェクト指向初心者です。
よろしくお願いします。

2つの画面をお互いに遷移するプログラムを作りたいと思っています。
ただし、フォームを2つ用意するのではなく、ユーザーコントロールを
2つ、フォームは一つです。
つまりユーザーコントロールをフォームに張り替えるといった感じです。

各ユーザーコントロールにボタンを一つ追加して、ボタンクリックイベントで
お互いのユーザーコントロールを表示したいのです。

*-------------------------------------------------------------*
[form1]
private void Form1_Load(object sender, EventArgs e) {
this.Controls.Add(new UserControl1());
}

[UserControl1]
private void button1_Click(object sender, EventArgs e) {
this.Parent.Controls.Clear();
this.Parent.Controls.Add(new UserControl2()); ←ここでエラーが出ます
}

UserControl1でUserControl2のインスタンスを作っているからなのですが、
このような場合、どうすればよいのでしょうか?
よろしくお願いします。
エラーが出るなら、そのエラーの詳細を書いてください。できれば一言一句。


今回のは、UserControl1 が UserControl2 を知らないために起こっているといった感じでしょうか。
// もしこの構造を変更して UserControl3 と UserControl1 を交互に表示したくなったらどうしますか?
UserControl1 が直接ほかの UserControl を持つのは不自然です。勝手に親の情報を書き換えるのもまずいですね。

親である Form は、当然自分が何を持っているのか知っていますよね。切り替えるという仕事はこっちがもつべきです。
// Form が持っているコントロールを Form が変更する。自然ですね。
問題は UserControl1 のボタンが押されたという情報をどうするかです。
普通は UserControl1 に ChangeButtonClicked とかのイベントを実装します。Form はそのイベントでコントロールを変更します。
イベントの実装方法については MSDN とかご覧ください。

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