VB.NET Tips - フォームの位置設定を行う

今回はフォームの位置を画面上のどの位置に表示するかを行う処理になります。
フォーム位置設定の関数内では、Screen.PrimaryScreen.WorkingArea プロパティによりディスプレイの大きさを取得し 計算に使っています。この関数では Screen.PrimaryScreen を使っているので、ディスプレイが一台のみと想定しています。

尚、Screen.PrimaryScreen.WorkingArea プロパティにより、ディスプレイの作業領域が取得できますが、 作業領域とは、ディスプレイのデスクトップ領域からタスクバー、 ドッキングされたウィンドウ、およびドッキングされたツール バーを除いた部分のことをいいます。

フォームの位置設定を行う関数と実行例

Public Class frmPosition

    'フォーム位置宣言
    Enum enmWindowPos
        Center = 0      '中央
        TopLeft         '左上
        TopRight        '右上
        BottomLeft      '左下
        BottomRight     '右下
    End Enum

    ''' <summary>
    ''' フォームの位置設定
    ''' </summary>
    ''' <param name="frmDes">対象のフォーム</param>
    ''' <param name="pos">位置</param>
    Private Sub SetWindowPosition(ByVal frmDes As Form, ByVal pos As enmWindowPos)

        With Screen.PrimaryScreen.WorkingArea
            Select Case pos
                Case enmWindowPos.Center        '中央
                    frmDes.Left = (.Width / 2) - (frmDes.Width / 2) + .Left
                    frmDes.Top = (.Height / 2) - (frmDes.Height / 2) + .Top

                Case enmWindowPos.TopLeft       '左上
                    frmDes.Left = 0
                    frmDes.Top = 0

                Case enmWindowPos.TopRight      '右上
                    frmDes.Left = .Width - frmDes.Width
                    frmDes.Top = 0

                Case enmWindowPos.BottomLeft    '左下
                    frmDes.Left = 0
                    frmDes.Top = .Height - frmDes.Height

                Case enmWindowPos.BottomRight   '左下
                    frmDes.Left = .Width - frmDes.Width
                    frmDes.Top = .Height - frmDes.Height
            End Select
        End With
    End Sub

    ''' <summary>
    ''' ボタンクリックイベント
    ''' </summary>
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'チェックするラジオボタン
        Dim arrRdo As RadioButton() = {Me.rdoTopLeft, Me.rdoTopRight, Me.rdoCenter, Me.rdoBottomLeft, Me.rdoBottomRight}
        For Each rdo As RadioButton In arrRdo
            If rdo.Checked = True Then
                'Tagより位置設定指示を取得
                Dim enmPos As enmWindowPos = CType(rdo.Tag, enmWindowPos)
                'ウインドウ設定
                Call Me.SetWindowPosition(Me, enmPos)
                Exit For
            End If
        Next
    End Sub

    ''' <summary>
    ''' フォームロードイベント
    ''' </summary>
    Private Sub frmPosition_Load(sender As Object, e As EventArgs) Handles Me.Load
        'ラジオボタンのTagにウインドウ位置Enum設定
        Me.rdoTopLeft.Tag = enmWindowPos.TopLeft
        Me.rdoTopRight.Tag = enmWindowPos.TopRight
        Me.rdoCenter.Tag = enmWindowPos.Center
        Me.rdoBottomLeft.Tag = enmWindowPos.BottomLeft
        Me.rdoBottomRight.Tag = enmWindowPos.BottomRight
    End Sub
End Class

このプログラムは、各ラジオボタンをチェックし、「フォーム位置設定」ボタンを押下することで、 自分自身のフォームの位置が移動します。