- - PR -
FormB(子)を操作したときのFormA(親)の振舞い
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-23 16:33
こんにちは。mocoです。
VS2005 C#でWindowsアプリを作っています。アドバイスお願いします。 FormA(親)とFormB(子)があり、次のことを実現したいと思います。 1.FormBが最小化されたとき、FormAも最小化 2.タスクバーには1つしか表示させたくない そこで次のコードを書いてみました。 == FormA Dialog == FormB dialog = new FormB(); dialog.Owner = this; dialog.ShowDialog(); dialog.Owner = null; dialog.Dispose(); == FormB Dialog == FormB_Shownイベント this.this.Owner.Visible = false; FormB_Resizeイベント if (this.WindowState == FormWindowState.Minimized) this.Owner.WindowState = FormWindowState.Minimized; FormB_FormClosingイベント this.Owner.Visible = true; 実現したい2つは満足できたのですが、 問題がタスクマネージャにアプリが表示されなくなってしまいました。 Visibleをfalseにしているせいだと思います。 この問題を解消したいのですが、何か良い方法はないでしょうか。 このソフトはメイン画面から沢山の子Formが連なっており、 実際にはFormBの下にも幾つか子Formが存在します。 なのでタスクバーにいくつもタスクを表示させたくありません。 皆さんは、こういったソフト作りではどのように作り込まれるのでしょうか。 申し訳ないですが教えてください。 よろしくおねがいします。 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 17:07
これは必要ありません。
using を使ってあげてください。
これは転記ミス... でしょうか?
呼び出し先 (子) は、呼び出し元 (親) を意識しない作りが望ましいです。 呼び出し元は自分が呼び出したものを意識しても良いです。 これはモジュールの 「結合度」 などの概念でよく言われることですが Form でも同じことです。 たとえば、呼び出し元で呼び出し先の Form のインスタンスを確保して、最小化したかどうかをイベントによって通知する方法を取ると子 Form は親 Form を意識せずタイミングを知ることができます。
いくつかあると思いますが、どれが望ましいかは要件次第になります。
ここが本題ですね。 子 Form と呼ばれているものが複数ドキュメントのようなイメージであれば、MDI アプリケーションという方法が望ましいです。 今回はまさにこれに当たるのではないでしょうか? moco さんが使用している Visual Studio 2005 もそのようにドキュメント管理していますよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 17:15
あえて言うなら、ShowDialog()と書かれているところが気になりますが。 いずれにしろ子フォームの仕様上の性質がポイントですね。 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 17:28
「タスク バーへの表示」 を気になさっていたようなので、そのためかと勝手に判断しておりました。 モーダル表示でないといけない、ということになると話は変わりますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 17:39
アドバイスありがとうございます。
すみません。ミスでした。
すぐに試してみます。
要件次第というと、どのような条件があるのでしょうか。 ごめんなさい知識不足で、、
MDIアプリケーションですね!使ったことないのを使うのは楽しみです。 あ、あと、モーダル表示でないといけないんです。 MDIはモーダレスでないと使えませんか? [ メッセージ編集済み 編集者: moco 編集日時 2007-08-23 17:40 ] [ メッセージ編集済み 編集者: moco 編集日時 2007-08-23 17:42 ] | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 19:35
おっと、編集で追記なさっていますね。
MDI アプリケーションでモーダル表示というのは一般的ではないかもしれませんが、できないなんてことはないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 19:48
ありがとうございます。じゃんぬさん。
じゃんぬさんのホームページにはいつもお世話になっております。 またよろしくお願い致します。 | ||||||||||||||||||||||||
|
投稿日時: 2007-08-23 21:45
MDIを今試しているのですが、分からなくなってしまいました。
すみません、また教えていただけますか。
こちらから、単純に子FormをShowDialog()で表示させようとしましたが、 MDI コンテナ フォームはトップレベルにしてください。 とエラーが出ます。 じゃんぬさんのおっしゃった方法を教えて頂けませんか。 なんかいも申し訳ないです。 MDIでは親1に対し複数の子を存在させることができ、 親は1つしか存在できないようです。 一方で、あたしの実現したいかたちは『親 → 子 → 孫 → ・・・』というように、 親子関係が続いて深くなっているので MDIでどう実現すればよいか悩んでいます。 基本的なことでしたらゴメンなさい。。 |