タイトル | : Re: フォームの重ね順番制御について |
記事No | : 11744 |
投稿日 | : 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
|