サイズ変更したフォームのサイズと位置を設定・取得したい方法
- プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、最大化した後で、元のウィンドウのサイズと位置を取得する方法を教えてください。
- また、最大化されている状態で、元のウィンドウに戻した時のサイズと位置を設定する方法も知りたいです。
- 一瞬表示する必要のないウィンドウを表示せずに、内部だけでサイズと位置を取得・設定する方法も教えてください。
- ベストアンサー
サイズ変更したフォームのサイズと位置を設定・取得したいです。
プログラムを起動したフォーム(ウィンドウ)のサイズと位置を変更して、 その後最大化した後で、元のウィンドウのサイズと位置を取得したいのですがどのようにしたら良いでしょうか? また、最大化されている状態で、元のウィンドウにした時になるサイズと位置を設定するにはどうしたら良いでしょうか? 例えば設定時は Me.SetBounds(0, 0, sizex, sizey, BoundsSpecified.All) Me.WindowState = FormWindowState.Maximized と2段階でやれば、最大化しつつ、サイズ変更のウィンドウをあらかじめ設定しておく事が出来るのですが、 一瞬、表示する必要のない1行目のウィンドウが表示されてしまうので、 内部だけで取得、設定したいです。 よろしくおねがいします。m(__)m
- popopompom
- お礼率43% (75/173)
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (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
関連する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)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。
- 締切済み
- Visual Basic
- ウィンドウとコントロールのサイズ制御
ウィンドウ(Form2)を最大化した時に、配置されたコントロールも大きくなるようにしたいのですが、どうしたらよいのでしょうか? Form2はForm1から ---------------------------------------------- Dim p As New Form2 p.WindowState = FormWindowState.Maximized p.Show() ---------------------------------------------- で呼び出しています。 Form2には Label や PictureBox を配置しています。 環境はVisualBasic2010 Professionalです。
- ベストアンサー
- Visual Basic
- ウィンドウの位置やサイズを初期化するには?
IEのウィンドウのサイズや位置を初期化したいのですが、どうすればいいですか? 現在、IEのサイズか位置かわかりませんが、おかしくなってまして、 IEを「元のサイズ」にすると画面から何もなくなります。 でも下のタスクバーの中にはIEはあります。 最大化すると普通に最大化されます。 「移動」や「サイズ変更」をおしても捕まえられません。 そこで位置とサイズを初期化したいのですが、 どうすればいいでしょうか? WindowsXPです。
- ベストアンサー
- Windows XP
- ウィンドウを開く時のサイズはどこで設定するのですか
windows2KorXPでIE6を開く時に、 ウィンドウサイズが最大で開くのか、元のサイズで開くのか、 また、元のサイズの大きさ・位置はどう設定されるのか、 を指定する方法はどうするのでしょうか。
- 締切済み
- オフィス系ソフト
- Webフォームでのウィンドウ表示について
もしかしたらASPのカテゴリで質問するべき内容なのかもしれませんが、 VB使用しているのでここで質問させて頂きます。 現在、VB.NETを使用してWebアプリケーションを作成していて、 初画面を起動するときにウィンドウを最大表示させたいのですがうまく出来ません。 イメージとしては、Windowsアプリケーションを作成するときの WindowStateをMaximizedにするような感じです。 何か良い方法はないでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- フォームサイズ変更時のコントロール位置について
OS:WindowsXP Pro SP2 VB:6.0 SP6 はじめまして。 VBで開発を行っているのですが フォームのサイズ変更をした時、コントロールの位置に困っています。 最大化した時などは端にコントロールが寄ってしまい見た目が大変悪いです。 フォームサイズの変更時にコントロールも任意の位置に移動する方法はどのようにすれば良いのでしょうか? ご存知の方ご教示宜しくお願いいたします。
- ベストアンサー
- Visual Basic
- ウインドウのサイズ変更
すみません、VB初心者です。 Accsee VBAで作られたプログラムを修正しています。 今、ウインドウのサイズが最大化されているようなので、 サイズを変更したいのですが、 Form_Open()のところで、 DoCmd.MoveSize()をCallしてサイズを指定しているのですが、 も最大化されたままなのです。他に何か設定があるのでしょうか。 画面としてはフォームにさらにサブフォームを表示していて(意味わかりますか?) フォームも元から作ってあってほとんど修正はしていません。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- エクセルウィンドウのサイズ変更ができなくなって・・・
初歩的な質問ですみません。 昨日から、エクセルウィンドウのサイズ変更ができなくなってしまいました。 右片のとこに、『最小化』『元のサイズに戻す』『最大化』の3ツのボタンがあると思いますが、『最小化』『最大化』はそうなるんですが、『元のサイズに戻す』をクリックすると、最小化されてしまうんです。(下のバーに下りる) その上、下のバーにおりたエクセルをクリックしても開かずに、右クリックで『最大化』を押すと最大サイズで開くんです。 何を変更した憶えも無いんですが、何か設定が変わってしまったのでしょうか? サイズ変更できないと、作業が大変やりずらいんです。(T_T) 助けてください! バージョンは、ウィンドウズ98・エクセル97です。
- ベストアンサー
- オフィス系ソフト
- Access2003 ウインドのサイズ変更
基本、マクロにて『最大化』を設定しているのですが 一部のウインドだけ小さく表示したいと思っています。 マクロにて『サイズ変更』を作成し、各々位置やサイズの数字を入力し、フォームのプロパティの『開く時』に設定していますが、構わず最大化してしまいます。 やはり不可能でしょうか? 宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- VBのフォームサイズについて
Win2000、VB6.0SP5で開発しようとしております。 そこで、起動時に最大化された状態にしたいと思っております。 VSにてフォームのプロパティで、「WindowState=最大化」とすればできるかと思っていたのですが。 Windowsのタスクバーの下に画面が隠れてしまいます。初め、標準として起動させ、最大化ボタンで最大にすると、タスクバーの上までで最大化でき隠れることはありません。 起動時に、タスクバーを考慮して最大化させることは可能でしょうか? よろしくお願いします。
- 締切済み
- Visual Basic
お礼
詳しいお返事たいへんありがとうございます。 こんなに複雑な処理が必要とは思っていませんでした。 これから試してみたいと思います。ありがとうございます。