C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ウインドウの表示順番の取得

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■96047 / inTopicNo.1)  ウインドウの表示順番の取得
  
□投稿者/ 雀 (1回)-(2020/10/18(Sun) 20:40:11)

分類:[.NET 全般] 


VB2015を使って、MDIアプリケーションを作成しているのですが、
子ウインドウの位置や表示順番(最前面などの設定)を取得して
保存しておき、再度プログラムを開いた時に
再現できるようにしたいと考えています。

ウインドウの位置に関してはどの変数を使えば良いか分かるのですが
表示順番に関してどのパラメータを使えば良いでしょうか?



引用返信 編集キー/
■96048 / inTopicNo.2)  Re[1]: ウインドウの表示順番の取得
□投稿者/ 雀 (3回)-(2020/10/18(Sun) 22:04:51)
ちなみに



            For Each c As Form In form0.MdiChildren

                With c
                        writer.WriteLine(.Name & ":" & vbTab & String.Format("{0},{1},{2},{3},{4}", CInt(.WindowState), .Bounds.X, .Bounds.Y, .Bounds.Width, .Bounds.Height))
                End With

            Next c



こういうコードで、位置などは取得しています。
Zオーダーもこれと同じように取得できますでしょうか?

解決済み
引用返信 編集キー/
■96049 / inTopicNo.3)  Re[2]: ウインドウの表示順番の取得
□投稿者/ 雀 (4回)-(2020/10/18(Sun) 22:05:21)
あああ
引用返信 編集キー/
■96055 / inTopicNo.4)  Re[1]: ウインドウの表示順番の取得
□投稿者/ KOZ (138回)-(2020/10/19(Mon) 10:06:46)
No96047 (雀 さん) に返信
> ウインドウの位置に関してはどの変数を使えば良いか分かるのですが
> 表示順番に関してどのパラメータを使えば良いでしょうか?

こんな感じで並びを調べるしか方法がなさそうです。

Imports System.Runtime.InteropServices

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindow(ByVal hWnd As IntPtr, ByVal uCmd As GetWindowType) As IntPtr
End Function

Private Enum GetWindowType As UInteger
    GW_HWNDFIRST = 0
    GW_HWNDLAST = 1
    GW_HWNDNEXT = 2
    GW_HWNDPREV = 3
    GW_OWNER = 4
    GW_CHILD = 5
    GW_ENABLEDPOPUP = 6
End Enum

Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    If Me.MdiChildren.Count > 0 Then
        Debug.Print("--START--")
        Dim childHwnd As IntPtr = GetWindow(Me.MdiChildren(0).Handle, GetWindowType.GW_HWNDFIRST)
        While childHwnd <> IntPtr.Zero
            Dim f As Form = Control.FromHandle(childHwnd)
            Debug.Print(f.Text)
            childHwnd = GetWindow(childHwnd, GetWindowType.GW_HWNDNEXT)
        End While
    End If
End Sub

引用返信 編集キー/
■96070 / inTopicNo.5)  Re[2]: ウインドウの表示順番の取得
□投稿者/ 雀 (5回)-(2020/10/19(Mon) 22:15:44)
No96055 (KOZ さん) に返信


ありがとうございます。
このような方法を使えば良かったのですね。

あと、取得できたZオーダーを
反映させるにはどのようにすればよろしいでしょうか?

引用返信 編集キー/
■96073 / inTopicNo.6)  Re[3]: ウインドウの表示順番の取得
□投稿者/ 雀 (6回)-(2020/10/19(Mon) 23:02:03)
やはり、ウインドウを下から順番にActivateしていくしかないでしょうか?
もっとスマートな方法があればお教えください。
引用返信 編集キー/
■96075 / inTopicNo.7)  Re[4]: ウインドウの表示順番の取得
□投稿者/ KOZ (139回)-(2020/10/20(Tue) 00:46:16)
No96073 (雀 さん) に返信
> やはり、ウインドウを下から順番にActivateしていくしかないでしょうか?
> もっとスマートな方法があればお教えください。

それでも良いですし、BringToFront メソッドというのもあります。
ベストなのは、下から順番に作成していく方法でしょうね。
引用返信 編集キー/
■96105 / inTopicNo.8)  Re[5]: ウインドウの表示順番の取得
□投稿者/ 雀 (7回)-(2020/10/21(Wed) 18:01:55)
うまくいきました。
どうもありがとうございます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ