- 日時: 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 にタイマーコントロールを使った方法も掲載しています。
|