tagCANDY CGI VBレスキュー(花ちゃん) - 複数フォームの上下(Zオーダー)を保つ方法(VB.NET) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
複数フォームの上下(Zオーダー)を保つ方法(VB.NET)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

複数フォームの上下(Zオーダー)を保つ方法(VB.NET) [No.290の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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 にタイマーコントロールを使った方法も掲載しています。
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ