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

わんくま同盟

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

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


(過去ログ 166 を表示中)
■96116 / )  Re[1]: BringToFrontを最後に更新する方法
□投稿者/ KOZ (140回)-(2020/10/22(Thu) 09:27:53)
No96106 (雀 さん) に返信
> ウインドウを順番に .BringToFront()を設定していく必要があります。
> ウインドウの数が多いと、画面がちかちかして時間がかかってしまいます。

だからこそ、並びの順に下から作成するのがベストだと書いたのですが・・・

一応、こんな感じで抑制できそうです。

<DllImport("user32.dll")>
Private Shared Function LockWindowUpdate(ByVal hWndLock As IntPtr) As Boolean
End Function

Private Enum ShowWindowCommands
    SW_HIDE = 0
    SW_SHOWNORMAL = 1
    SW_SHOWMINIMIZED = 2
    SW_SHOWMAXIMIZED = 3
    SW_MAXIMIZE = 3
    SW_SHOWNOACTIVATE = 4
    SW_SHOW = 5
    SW_MINIMIZE = 6
    SW_SHOWMINNOACTIVE = 7
    SW_SHOWNA = 8
    SW_RESTORE = 9
    SW_SHOWDEFAULT = 10
    SW_FORCEMINIMIZE = 11
End Enum

<DllImport("user32.dll")>
Private Shared Function ShowWindow(hWnd As IntPtr, <MarshalAs(UnmanagedType.I4)> nCmdShow As ShowWindowCommands) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    If Me.MdiChildren.Count > 0 Then
        Dim mc As MdiClient = Me.MdiChildren(0).Parent
        LockWindowUpdate(mc.Handle)
        ShowWindow(mc.Handle, ShowWindowCommands.SW_HIDE)
        '
        ' 並び替えの処理
        '
        ShowWindow(mc.Handle, ShowWindowCommands.SW_SHOW)
        LockWindowUpdate(IntPtr.Zero)
    End If
End Sub

返信 編集キー/


管理者用

- Child Tree -