VB.NETフォームを常に最背面に表示する

スポンサーリンク

フォームを常に最背面に表示したい場合は、Win32 API に頼ることになります。FindWindow 関数で Program Manager という特別なウィンドウ ハンドルを得て、そのハンドルを SetParent 関数で親ウィンドウのハンドルにすることで再背面を実現します。

まずは、ベタな方法からやってみましょう。初めに、API の宣言をしておく必要があります。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
Option Strict On

' 以下の名前空間をインポートする
Imports System.Runtime.InteropServices

Public Class Form1 : Inherits System.Windows.Forms.Form

   Windows フォーム デザイナで生成されたコード 

    ' FindWindow 関数
    <DllImport("USER32.DLL", CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
        ByVal lpClassName  As String, _
        ByVal lpWindowName As String) As System.IntPtr
    End Function

    ' SetParent 関数
    <DllImport("USER32.DLL", CharSet:=CharSet.Auto)> _
    Private Shared Function SetParent( _
        ByVal hWndChild     As System.IntPtr, _
        ByVal hWndNewParent As System.IntPtr) As System.IntPtr
    End Function

    ' ここから先が使用例になります
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Program Manager のハンドルを取得する
        Dim hProgramManagerHandle As System.IntPtr = FindWindow(Nothing, "Program Manager")

        ' 正しく取得できた場合は、Program Manager を親ウィンドウに設定する
        If Not hProgramManagerHandle.Equals(System.IntPtr.Zero) Then
            SetParent(Me.Handle, hProgramManagerHandle)
        End If
    End Sub

End Class

次に TopMost プロパティに習って、BottomMost プロパティのようなものを作ってみましょう。このプロパティを true に設定すると再背面での表示になり、false に設定すると元に戻るようなイメージになります。

ここから先は保留中...

関連するリファレンス

準備中です。

スポンサーリンク