tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
複数フォームの上下(Zオーダー)を保つ方法(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2011/03/22 19:53
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[フォーム][自アプリ関係][]                                          *
* キーワード:最前面,Zオーダー,アクティブ,フォーカス,Window List                  *
***********************************************************************************
タイトル : 複数フォームの上下を保つ方法
記 事 No : 10448
投 稿 日 : 2011/03/07(Mon) 10:48
元質問者 : camputer  

MainFormの上に、SubForm1とSubForm2がございます。
SubForm2がSubForm1に隠れてしまう事があり困っておりますが、
SubForm2をSubForm1より常に上にする、といったコーディングは可能でございましょうか?

試しにMainFormから、SubForm1.Show(Me) SubForm2.Show(SubForm1) といたしましたところ、
最小化などMainFormからの操作ができなくなってしまいますし、色々検索いたしておりましても、
「孫フォームの作成はあまり良くない」といった印象を受けている次第でございます。

 あとForm2.TopMost = True  といたしましても、他のエクスプローラ画面群より常に上に
表示されてしまい不便でございます。

-----------------------------------------------------------------------------------
記事No : 10453
投稿日 : 2011/03/09(Wed) 08:43
回答者 : 花ちゃん  
-----------------------------------------------------------------------------------
下記での動作でいいのなら、Form2 にだけに書くことで実現できます。

Public Class Form2

Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
   Select Case m.Msg
      Case &H6, &H1C
         Dim hActv As IntPtr = GetForegroundWindow()
         If hActv = Form1.Handle Or hActv = Me.Handle Then
            Me.TopMost = True
         Else
            Me.TopMost = False
         End If
      Case Else
   End Select
   MyBase.WndProc(m)
End Sub

End Class

記事No:10451 にタイマーコントロールを使った方法も掲載しています。



 [スレッド一覧へ] [親スレッドへ]