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

MDIの子フォームの最大化イベントについて

環境/言語:[XP VB.Net]
分類:[.NET]


お世話になります。

MDIの子フォームが親フォーム内にて最大化された時の
イベント名をご教授下さい。

MaximumSizeChangedでは管理されていないようで,制御できませんでした。
dockあたりかと思い,試しましたがうまくいきませんでした。

よろしくお願い致します。
確かにWindowStateChangedなんてのはありませんね。
ResizeやSizeではどうでしょうか。

ただし、MDI子フォームでは双方とも2回発生するようです。
■No19959に返信(まどかさんの記事)
> 確かにWindowStateChangedなんてのはありませんね。
> ResizeやSizeではどうでしょうか。

MDI フォームでは 「Layout イベント + WindowState」 はダメだったかな?
> MDI フォームでは 「Layout イベント + WindowState」 はダメだったかな?

Layoutも2回発生しますねぇ(-_-;
■No19961に返信(まどかさんの記事)
> Layoutも2回発生しますねぇ(-_-;

少なくとも Resize イベントはタイミングからして多発するので望ましくないですよ。
という意味もあります。
> 少なくとも Resize イベントはタイミングからして多発するので望ましくないですよ。

確かに。
せめてResizeEndが使えたらというところですね。

で本題そのものが無いなら、何をしようとしてるのかで代替案が出てくる可能性がありますね。
単純な内部配置ならAnchorやDockとか。
>何をしようとしてるのかで代替案が出てくる可能性がありますね。
行いたいことは,子フォームの一つでも最大化した場合に,
子フォーム郡をタグコントロール内(親フォーム一杯に表示された)に収めたいと思っていました。

たとえば,
子フォームA
子フォームB
子フォームC

タグA <- 子フォームA
タグB <- 子フォームB
タグC <- 子フォームC

一つのタグに子フォームの内容を最大表示する。ちょっと説明不足かもしれません。(結構,あいまいなイメージで作ろうとしていまして,すみません。)
> 行いたいことは,子フォームの一つでも最大化した場合に,
> 子フォーム郡をタグコントロール内(親フォーム一杯に表示された)に収めたいと思っていました。
>
> タグA <- 子フォームA
> タグB <- 子フォームB
> タグC <- 子フォームC
>
> 一つのタグに子フォームの内容を最大表示する。

#タグコントロール=タブコントロールと理解して話を進めます。

MDI親フォームの内側にタブコントロールが最大サイズで表示されているのですか?
MDI子フォームが表示されるべき領域が無いですよね。
つまりMDI子フォームが複数存在する場合を想像することができません。
この時点でMDIアプリケーションではないのではないでしょうか?

仕様とそれがMDIアプリケーションの形態であるかを再検討してみてください。
※「MDIとは」も含めて
>MDI親フォームの内側にタブコントロールが最大サイズで表示されているのですか?
>MDI子フォームが表示されるべき領域が無いですよね。
>この時点でMDIアプリケーションではないのではないでしょうか?

タブコントロールでした。

MDI親フォームの内側にタブコントロールが最大表示されます。
この状態では,MDI子フォームで表示される領域は,ありません。

切り替えを行おうかと思いまして。。。。
タブコントロール⇔子フォーム郡
タブコントロール→子フォーム郡への切り替えは,別途ボタンを容易するれば,よいかなと。
子フォーム郡→タブコントロールへの切り替えは,子フォームの一つを最大化した場合に,すればよいかなと思っていました。
タブコントロールは要求仕様とどのような関係があるのでしょうか?

例えば、親フォームにMenuStripを貼り付けて、中にメニュー(menuWindow)を一つ追加します。
MenuStrip1.MDIWindowListItem = menuWindow
とすれば勝手に子ウィンドウ一覧を作成してくれて切り替えすることができます。

そうではなくて独自に切り替えをおこないたいのですか?
■No19985に返信(まどかさんの記事)
> タブコントロールは要求仕様とどのような関係があるのでしょうか?
操作性の向上だけです。タブ形式は、個人的に見やすく・操作しやすいと思いまして。また、ファイル同士を比較したい場合等がでてきた場合は、タブ形式では、横に並べられないので、子ウィンドウにして表示したらよいかなと思っていました。MDIにしたのは、関連するファイルを一つのアプリで扱うことにより、展開・管理が容易かと思っていました。

> 例えば、親フォームにMenuStripを貼り付けて、中にメニュー(menuWindow)を一つ追加します。
> MenuStrip1.MDIWindowListItem = menuWindow
> とすれば勝手に子ウィンドウ一覧を作成してくれて切り替えすることができます。
>
こういうこともできるのですね。ただ、タブコントロールみたいな動きをするものが見つかりません。 もう少し、この辺りを調査してみます。

> そうではなくて独自に切り替えをおこないたいのですか?
結論としては、そうなります。

長々とご回答頂きありがとうございます。感謝しております。m(_ _)m
> 操作性の向上だけです。タブ形式は、個人的に見やすく・操作しやすいと思いまして。また、ファイル同士を比較したい場合等がでてきた場合は、タブ形式では、横に並べられないので、子ウィンドウにして表示したらよいかなと思っていました。MDIにしたのは、関連するファイルを一つのアプリで扱うことにより、展開・管理が容易かと思っていました。

この目的に特化するならMDIではなく通常のフォームにTabControlを貼り付けて
動的にTabPageの中身を追加削除していけばよいのではないでしょうか。

> ただ、タブコントロールみたいな動きをするものが見つかりません。

MDI子フォームをTab切り替えのようにする標準機能はありません。
実現方法としては
・子ウィンドウ領域にToolStripを配置しToolStripMenuItem等を動的に配置する
・同様にコンテナを配置し中にStyle=ButtonなCheckBoxを動的に配置する
等が考えられます。

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