タイトル : Re: フォームの重ね順番制御について 投稿日 : 2016/10/11(Tue) 21:28 投稿者 : 魔界の仮面弁士
==== VB2005 ==== (1) プロジェクトに新しいクラス ファイルを "ThunderMain.vb" という名で追加します。 (2) そのファイルの内容を、以下のように差し替えます。 Public Class ThunderMain Inherits System.Windows.Forms.Form End Class (3) Form1 および Form2 の Load イベントに下記を記述します。 If Me.Owner Is Nothing Then Me.Owner = My.Forms.ThunderMain これで、VB6 互換の動作になると思います。 もっと巧いやり方があるのかもしれませんが、とりあえず思いついた方法ということで。 ちなみに上記に書いた "ThunderMain" とは、VB6 が持つ「隠しフォーム」の名前です。 VB6 では下記のようにして、ThunderMain およびロード済みフォームのハンドルを得られます。 蛇足情報ですが、一応参考までに。 ==== VB6 ==== '----- 出力先は ListBox でも Debug.Print でも良いけれど List1.Clear Dim f As Form For Each f In Forms List1.AddItem TypeName(f) & vbTab & Hex(f.hWnd) Next With New CThunderMain List1.AddItem "ThunderMain" & vbTab & Hex(.hWnd) End With '----- 上記で使う CThunderMain.cls ファイル Option Explicit Private Declare Function FindWindowW Lib "user32.dll" (ByVal lpClassName As OLE_HANDLE, ByVal lpWindowName As OLE_HANDLE) As OLE_HANDLE Private m_hWnd As OLE_HANDLE Public Property Get hWnd() As OLE_HANDLE hWnd = m_hWnd End Property Friend Property Get IsDebug() As Boolean Dim debugMode As Boolean Debug.Assert OnDebug(debugMode) IsDebug = debugMode End Property Private Function OnDebug(ByRef debugMode As Boolean) As Boolean debugMode = True OnDebug = debugMode End Function Private Sub Class_Initialize() Dim sTitle As String sTitle = App.Title App.Title = Hex(ObjPtr(Me)) If IsDebug Then m_hWnd = FindWindowW(StrPtr("ThunderMain"), StrPtr(App.Title)) Else Dim sThunderMain As String 'sThunderMain = "ThunderRTMain" 'VB4 'sThunderMain = "ThunderRT5Main" 'VB5 sThunderMain = "ThunderRT6Main" 'VB6 m_hWnd = FindWindowW(StrPtr(sThunderMain), StrPtr(App.Title)) End If App.Title = sTitle End Sub |