tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。