サイズ変更したフォームのサイズと位置を設定・取得したい方法

このQ&Aのポイント
  • プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、最大化した後で、元のウィンドウのサイズと位置を取得する方法を教えてください。
  • また、最大化されている状態で、元のウィンドウに戻した時のサイズと位置を設定する方法も知りたいです。
  • 一瞬表示する必要のないウィンドウを表示せずに、内部だけでサイズと位置を取得・設定する方法も教えてください。
回答を見る
  • ベストアンサー

サイズ変更したフォームのサイズと位置を設定・取得したいです。

プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、 その後最大化した後で、元のウィンドウのサイズと位置を取得したいのですがどのようにしたら良いでしょうか? また、最大化されている状態で、元のウィンドウにした時になるサイズと位置を設定するにはどうしたら良いでしょうか? 例えば設定時は Me.SetBounds(0, 0, sizex, sizey, BoundsSpecified.All) Me.WindowState = FormWindowState.Maximized と2段階でやれば、最大化しつつ、サイズ変更のウィンドウをあらかじめ設定しておく事が出来るのですが、 一瞬、表示する必要のない1行目のウィンドウが表示されてしまうので、 内部だけで取得、設定したいです。 よろしくおねがいします。m(__)m

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

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

http://www.microsoft.com/japan/msdn/net/general/win32map.asp GetWindowPlacement SetWindowPlacement の情報があります。 System.Windows.Forms.Form.Bounds これでもしかしたらできるのかも知れませんが、、、 私の環境は .NET2002 Framework1.0 のせいなのかどうかわかりませんが、このクラスを使えませんでした。 なのでAPIをそのまま利用する方法の情報を記します。 http://www.winapi-database.com/Window/Change/GetWindowPlacement.html http://www.winapi-database.com/Window/Change/SetWindowPlacement.html http://www.winapi-database.com/Struct/WINDOWPLACEMENT.html Private Enum Flags_WPF   WPF_SETMINPOSITION = &H1   WPF_RESTORETOMAXIMIZED = &H2 End Enum Private Enum showCmd_SW   SW_HIDE = 0   SW_SHOWNORMAL = 1   SW_SHOWMINIMIZED = 2   SW_SHOWMAXIMIZED = 3   SW_SHOWNOACTIVATE = 4   SW_SHOW = 5   SW_MINIMIZE = 6   SW_SHOWMINNOACTIVE = 7   SW_SHOWNA = 8   SW_RESTORE = 9 End Enum Private Structure RECT   Dim Left As Integer   Dim Top As Integer   Dim Right As Integer   Dim Bottom As Integer End Structure Private Structure WINDOWPLACEMENT   Dim Length As Integer   Dim Flags As Flags_WPF   Dim showCmd As showCmd_SW   Dim ptMinPosition As Point   Dim ptMaxPosition As Point   Dim rcNormalPosition As RECT End Structure Private Declare Auto Function GetWindowPlacement Lib "user32" ( _     ByVal hWnd As IntPtr, _     ByRef lpwndpl As WINDOWPLACEMENT _ ) As Boolean Private Declare Auto Function SetWindowPlacement Lib "user32" ( _     ByVal hWnd As IntPtr, _     ByRef lpwndpl As WINDOWPLACEMENT _ ) As Boolean Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   Dim l_ptr As IntPtr = Me.Handle   Dim l_WINDOWPLACEMENT As WINDOWPLACEMENT   Dim l_blnRet As Boolean   '構造体のサイズ情報を格納   l_WINDOWPLACEMENT.Length = Marshal.SizeOf(GetType(WINDOWPLACEMENT))   '取得実行   l_blnRet = GetWindowPlacement(l_ptr, l_WINDOWPLACEMENT)   If Not l_blnRet Then     MsgBox("取得失敗")     Return   End If   '通常サイズ時の情報デッバグ   With l_WINDOWPLACEMENT.rcNormalPosition     Console.WriteLine(Join(New String() {.Left, .Top, .Right, .Bottom}, vbTab))   End With   '各情報の指定   With l_WINDOWPLACEMENT     '最大表示を指定     .showCmd = showCmd_SW.SW_SHOWMAXIMIZED     '通常表示時のポジショニングを指定     With .rcNormalPosition       .Left = 0       .Top = 0       .Right = 300       .Bottom = 500     End With   End With   '設定実行   l_blnRet = SetWindowPlacement(l_ptr, l_WINDOWPLACEMENT)   If Not l_blnRet Then     MsgBox("設定失敗")     Return   End If End Sub

popopompom
質問者

お礼

詳しいお返事たいへんありがとうございます。 こんなに複雑な処理が必要とは思っていませんでした。 これから試してみたいと思います。ありがとうございます。

関連するQ&A

  • 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)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。

  • ウィンドウとコントロールのサイズ制御

    ウィンドウ(Form2)を最大化した時に、配置されたコントロールも大きくなるようにしたいのですが、どうしたらよいのでしょうか? Form2はForm1から ---------------------------------------------- Dim p As New Form2 p.WindowState = FormWindowState.Maximized p.Show() ---------------------------------------------- で呼び出しています。 Form2には Label や PictureBox を配置しています。 環境はVisualBasic2010 Professionalです。

  • ウィンドウの位置やサイズを初期化するには?

    IEのウィンドウのサイズや位置を初期化したいのですが、どうすればいいですか? 現在、IEのサイズか位置かわかりませんが、おかしくなってまして、 IEを「元のサイズ」にすると画面から何もなくなります。 でも下のタスクバーの中にはIEはあります。 最大化すると普通に最大化されます。 「移動」や「サイズ変更」をおしても捕まえられません。 そこで位置とサイズを初期化したいのですが、 どうすればいいでしょうか? WindowsXPです。

  • ウィンドウを開く時のサイズはどこで設定するのですか

    windows2KorXPでIE6を開く時に、 ウィンドウサイズが最大で開くのか、元のサイズで開くのか、 また、元のサイズの大きさ・位置はどう設定されるのか、 を指定する方法はどうするのでしょうか。

  • Webフォームでのウィンドウ表示について

    もしかしたらASPのカテゴリで質問するべき内容なのかもしれませんが、 VB使用しているのでここで質問させて頂きます。 現在、VB.NETを使用してWebアプリケーションを作成していて、 初画面を起動するときにウィンドウを最大表示させたいのですがうまく出来ません。 イメージとしては、Windowsアプリケーションを作成するときの WindowStateをMaximizedにするような感じです。 何か良い方法はないでしょうか? よろしくお願いします。

  • フォームサイズ変更時のコントロール位置について

    OS:WindowsXP Pro SP2 VB:6.0 SP6 はじめまして。 VBで開発を行っているのですが フォームのサイズ変更をした時、コントロールの位置に困っています。 最大化した時などは端にコントロールが寄ってしまい見た目が大変悪いです。 フォームサイズの変更時にコントロールも任意の位置に移動する方法はどのようにすれば良いのでしょうか? ご存知の方ご教示宜しくお願いいたします。

  • ウインドウのサイズ変更

    すみません、VB初心者です。 Accsee VBAで作られたプログラムを修正しています。 今、ウインドウのサイズが最大化されているようなので、 サイズを変更したいのですが、 Form_Open()のところで、 DoCmd.MoveSize()をCallしてサイズを指定しているのですが、 も最大化されたままなのです。他に何か設定があるのでしょうか。 画面としてはフォームにさらにサブフォームを表示していて(意味わかりますか?) フォームも元から作ってあってほとんど修正はしていません。 よろしくお願い致します。

  • エクセルウィンドウのサイズ変更ができなくなって・・・

    初歩的な質問ですみません。 昨日から、エクセルウィンドウのサイズ変更ができなくなってしまいました。 右片のとこに、『最小化』『元のサイズに戻す』『最大化』の3ツのボタンがあると思いますが、『最小化』『最大化』はそうなるんですが、『元のサイズに戻す』をクリックすると、最小化されてしまうんです。(下のバーに下りる) その上、下のバーにおりたエクセルをクリックしても開かずに、右クリックで『最大化』を押すと最大サイズで開くんです。 何を変更した憶えも無いんですが、何か設定が変わってしまったのでしょうか? サイズ変更できないと、作業が大変やりずらいんです。(T_T) 助けてください! バージョンは、ウィンドウズ98・エクセル97です。

  • Access2003 ウインドのサイズ変更

    基本、マクロにて『最大化』を設定しているのですが 一部のウインドだけ小さく表示したいと思っています。 マクロにて『サイズ変更』を作成し、各々位置やサイズの数字を入力し、フォームのプロパティの『開く時』に設定していますが、構わず最大化してしまいます。 やはり不可能でしょうか? 宜しくお願い致します。

  • VBのフォームサイズについて

    Win2000、VB6.0SP5で開発しようとしております。 そこで、起動時に最大化された状態にしたいと思っております。 VSにてフォームのプロパティで、「WindowState=最大化」とすればできるかと思っていたのですが。 Windowsのタスクバーの下に画面が隠れてしまいます。初め、標準として起動させ、最大化ボタンで最大にすると、タスクバーの上までで最大化でき隠れることはありません。 起動時に、タスクバーを考慮して最大化させることは可能でしょうか? よろしくお願いします。