• ベストアンサー

ダイアログの最小化

VB.NET 2003を使ってます。 フォームが3つあってそれぞれ重ねて(Form1でForm2を表示し、Form2でForm3を表示するという意味)モーダルで表示しておいて、Form3のダイアログの最小化ボタンを押したときに、このアプリの全てのウインドウ(Form1とForm2も含む)を最小化したいのです。 普通だとForm3だけ最小化されてしまいますよね。 理想の動きとしては、windows標準の”デスクトップの表示”の機能を、自分が作ったアプリだけを最小化したようなイメージです。 タスクバーのアプリをクリックすればウィンドウが復元されて便利です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

自分の知識で考えた結果だと、Form3を最小化=全て最小化はたぶん無理かと・・・ なので違う方法を書いておきます。 その方法はForm1からForm2を呼び出した時にForm1自身をForm2に渡して、Form2を閉じる前に渡されたForm1をShowすればいいのでは? ポイントは・・・・ Form2にFormのPropertyを作成してそこにForm1を渡す。 Form1はMe.Hideで非表示にする事を忘れずに。

suyasuyasuya
質問者

お礼

ありがとうございます。 この方法だと全部作りこまないといけないのでたいへんと感じております。 ”デスクトップの表示”の動作と同じように、簡単にできないかと調べている最中です。 アプリケーションへ何かしらのメッセージを送信すればできそうに感じておりますが、なかなか見つからないでおります。

suyasuyasuya
質問者

補足

MDI形式に直しました。 Formからのコンポーネントクラスを作成して、Newのときに親フォームのEnabledをFalseにするようにし、DisposeでTrueに戻すようにしました。 通常のShowDialog()のように、戻ってきてから処理するような処理については、コンポーネントクラスにオーバーライド可能な関数を用意し、親の関数を呼び出すなどで対応しました。

その他の回答 (1)

回答No.2

#1です。 先ほどの方法と似ていますが、最小化のボタンを押されたイベントを取得して以下のURLを参考に、他のフォームも最小化してあげるのはどうでしょう。 http://support.microsoft.com/default.aspx?scid=kb;ja;JP308537 上記のFormsコレクションを使用するということろで、それぞれのフォームを最小化すればできそうです。 フォームの最小化がされたかの判断はResizeイベントでMe.WindowStateで判断できると思います。 http://dobon.net/vb/dotnet/form/windowsstate.html

suyasuyasuya
質問者

お礼

ありがとうございます。 全てをただ単に最小化しようと思えば、Formを管理してできますが、最小化されたアプリをタスクバーから選んだときに復元させるのが大変です。ウインドウによっては、ダイアログだったりsizableだったりするので。 スパイで、どんなメッセージが飛んでいるのかなど、もう少し調べてみたいと思います。

関連するQ&A