• 締切済み

フォームの最大化

MDIフォームを使ってchild formをいくつか表示しています。 設計段階でchild formのwindowstateを最大化に設定していますが最大化に設定したフォーム以外のフォームを表示したときに最初に最大化されて表示していたフォームが自動的に小さくなってしまいます。フォームの最大化を固定するにはどのようにすればよいのでしょうか。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

どもども、再び田吾作7です。 ぼくの知っている限りでは、常に最大化というのはMDIFormの子である限り、出来ません。(Windowsの仕様だと思うし・・・・) 「MDIFormの子もどき」とするのであれば可能です。 もどきというのは実際は子ではないのです。 手順を簡単に記すと(APIばっかりですが・・・) 1.MDIFormを開く 2.FindWindowExでMDIClient領域のハンドルを得る(クラス名="MDIClient") 3.常に最大化したいフォームを開く([MDIChild = False]) 4.SetParentにてそのフォームをMDIClient領域が親になるようにする。 5.SetWindowLong(MDIFormWnd,GWL_WNDPROC,AddressOf オリジナル関数名)でウィンドウズのメッセージを監視する(プロセス監視) 6.サイズ変更終了時に最大化したいフォームの最大化時のサイズをセットする (API忘れた・・・) 7.最大化のメッセージを送るSendMessage ってな感じです。 もしこの方法を使用するのであれば、本来のMDIの子達の上に常に表示されてしまうので、子は使えません。よって、子を作成するには手順1から手順4を使用して、子を作成しなくてはいけません。さらに、MDIFormのメッセージをもっといろいろな種類を拾って、各子達を制御しなくてはならなく、また子達のメッセージも拾わなくてはいけなくなります。 これをやってたら大変ですよ。 ですので、プログラムの仕様の変更か、もしくはNo1の回答の手順を行うのがベストだと思います。 でわでわ

xiaolong_goo
質問者

お礼

>ぼくの知っている限りでは、常に最大化というのはMDIFormの子である限り、出来ません。(Windowsの仕様だと思うし・・・・) やはり、仕様の問題でしょうか。 どんなことを試してもだめだったので質問してみたのですが、やはりそうなのでしょうね。 一度、教えていただいた手法でがんばってみます。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども田吾作7です 常に最大化というのは。。。 アクティブになった時に最大化してはだめですか? Private Sub Form_Activate() Me.WindowState = vbMaximized End Sub それがだめなら、 Private Sub Form_Activate() Me.Left = 0 Me.Top = 0 Me.Width = MDIForm1.ScaleWidth Me.Height = MDIForm1.ScaleHeight End Sub というように、MIDFormの表示領域いっぱいにサイズを指定して、 最大化に近いサイズで表示するとか? フォームを「BorderStyle=無し」にしてしまえば、ユーザからサイズの変更を されることもないし、、、 このとき注意すべきは、MDIFormのResize時にも、 このような最大化もどきを行うコードを実行しなければ ならないことです。 やっぱ反則? でわでわ

関連するQ&A

  • VB6でMDIフォームを使用しています。

    VB6でMDIフォームを使用しています。 MDIフォームで下記プログラムを作成しました。 (1)ツールバー上のボタン1を押し、子フォームAを表示させました。   ※子フォームAの WindowState を「2-最大化」に事前設定し、ウィンドウは最大化して表示されました。 (2)子フォームAを表示した状態で、同じツールバー上にあるボタン2を押し、子フォームB(ダイアログ)を表示させました。   ※子フォームBの WindowState を「0-標準」、BorderStyleを「3-固定ダイアログ」に事前設定し、表示されました。(一般的なオプション画面みたいなもの) 問題点はその際、子フォームAのウィンドウが勝手に「最大化」から「標準」に変わってしまうことです。 これを回避する方法はないのでしょうか? 以上、宜しくお願いいたします。

  • フォームロードについて

    VB2008で、Form_Load()に Me.Visible = falseや Me.Close()としてもフォームの非表示やフォームを閉じたりしないのですが、なぜなのでしょうか? 最初に起動した場合に、Form_Loadで初期設定を行った後に、自動的に直ぐにフォームを非表示や閉じることをしたいです。

  • MDIでフォームがアクティブにならない

    VB2008です。 MDIフォーム中にForm1とForm2があります。 Form1がアクティブです。 Form2をクリックしてもアクティブになりません。ただしタイトルバーをクリックするとアクティブになります。 これは言語の仕様でしょうか。市販のアプリケーションでは、タイトルバー以外の場所をクリックしてもアクティブになるものがほとんどですが、VB2008ではどのようにすれば実現できるのでしょうか。

  • VB.NET:モーダルで表示したフォームを最小化

    Form2をForm1の所有として、モーダルで表示しました。 '------------------------ Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChildMdl.Click  'Form2を開く  Dim frmN As New Form2  frmN.ShowDialog(Me) 'MeはForm1 End Sub '------------------------ Form2が最小化された時に、親フォームであるForm1も最小化させたいと思い、 Form2のResizeメソッドに以下のようなコードを書きました。 '------------------------ Private Sub Form2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize  Select Case Me.WindowState   Case FormWindowState.Minimized    '親フォームも最小化((1))    Me.Owner.WindowState = FormWindowState.Minimized   Case FormWindowState.Maximized    '親フォームも最大化((2))    Me.Owner.WindowState = FormWindowState.Maximized   Case FormWindowState.Normal    '親フォームも通常サイズ((3))    Me.Owner.WindowState = FormWindowState.Normal  End Select End Sub '------------------------ しかし、(2)、(3)は問題なく実行できるのですが、 (1)を実行すると、自フォーム(Form2)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。

  • 実行時のフォームの表示位置について

    VBでプログラムを作っているのですが、フォームをMDI子フォームに設定しているのですが、実行時に、MDI子フォームをMDIホームの中の左上に表示したいのですがやり方がわからないのでわかる方教えてください。

  • アクセスの起動時のフォームの最大表示

    アクセス2000を使用しています。ツールより起動時の設定で、フォーム名「メニュー」を自動的に最大で表示しようとしていますが、最大の表示ができません。いちいち、□ を押して最大にするのが面倒です。どうしたらアクセス起動時に、最大表示になりますか?教えてください。よろしくお願いします。

  • ラベルのクリックイベントについて

    現在、MDIParent1フォームに、MDI子フォーム(Form1)を表示させています。 MDIParent1フォーム,MDI子フォーム(Form1)には、それぞれlabel1が配置されています。 やりたい事 MDIParent1フォーム上のlabel1をクリックしたとき MDI子フォーム(Form1)上のlabel1のリックイベント を発生させたい よろしくお願いします

  • VBAのフォームについて

    今、悩んでいるというか、不思議に思っていることがあります。 ACCESS2003 VBAで、VBAコードでメインのフォームから、ある帳票フォームのインスタンスを作成しています。メインフォームのモジュールに以下のように記述し、 Dim 帳票1 as Form で、ボタンのクリックイベントで、 set 帳票1 = New Form_帳票の元フォーム とインスタンスを生成します。更に、この帳票フォームには、同様に子フォームを持っています。こちらも同様に帳票フォームモジュールに、 Dim 詳細1 as Form として、あるボタンのクリックイベントに、 set 詳細1 = New Form_詳細フォーム と、しています。ここで、帳票1の閉じるボタンを押しても、詳細1のフォームは、閉じません。 同様に、帳票の元フォームに Dim 帳票2 as form ボタンクリックで、 Set 帳票2 = New Form_帳票2の元フォーム とします。さらに帳票2の元フォームには、 Dim Child帳票 as Form ボタンクリックで、 Set Child帳票 = New Form_帳票2の元フォーム としています。 これで、Child帳票は、いくつもいくつもインスタンス化されます。そこで、今までの動作に準じて、たくさんあるChild帳票の大元を閉じると、こちらは子フォームが全部閉じます。例えば10個子フォームを作って、途中を閉じるとちゃんとその子だけが閉じます。最初の例の帳票1フォームを閉じても、詳細1フォームが閉じないのと、何が違うのか分かりません。私は、フォームが閉じるときには、そのメンバクラス(フォーム)は、破壊されるものだと思っていたのですが、そうでもないようです。どなたかわかりやすく、教えていただけないでしょうか?

  • JavaScriptによる自動計算フォーム

    サンプルを読んだりは多少わかる範囲なのですが、カスタムの段階で詰まってしまいましたのでお知恵お貸し頂ければと思います。 積算の自動計算フォームを作成しようとしてるのですが、サンプルでよくあるものが固定数値×プルダウン=小計のようなものが多く、この固定数を入力フォーム、プルダウンも入力フォームに切り替えたいのですが、変更すると合計欄がNaNと表示されてしまいます。 何か指定が間違っているのでしょうか。 こちらのサイトを参考に作っています。 http://www.tagindex.com/javascript/form/comp1b.html 宜しくお願いします。

  • access アプリケーションの最大化をしたい

    Ofiice2007を使っています。 エクセルなら Sub test() Application.WindowState = xlMaximized End Sub で最大化できますが、アクセスで同じコードを実行するとエラーになります。 Application.WindowState = acMaximized にしてもダメでした。 オブジェクトブラウザで検索したところ WindowStateもacMaximizedもアクセスにはないようです。 ヘルプでWindowStateを検索したところ、 WindowState プロパティと言うのを見つけました。 内容は、 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ウィンドウの表示状態を指定する数値を設定します。値の取得も可能です。 設定値 WindowState プロパティの設定値は、次のとおりです。 定数           値                  内容 vbext_ws_Normal    0   (既定値)      ノーマル vbext_ws_Min      1     最小化       (タスクバーに縮小表示) vbext_ws_Max      2    最大化       (画面全体に拡大表示) ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ とのことですが、どうやって使えば良いでしょう? Sub test() Application.WindowState = vbext_ws_Max End Sub だとダメでした。 ご教授よろしくお願いします。