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

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

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

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

01Public Class frmPosition
02 
03    'フォーム位置宣言
04    Enum enmWindowPos
05        Center = 0      '中央
06        TopLeft         '左上
07        TopRight        '右上
08        BottomLeft      '左下
09        BottomRight     '右下
10    End Enum
11 
12    ''' <summary>
13    ''' フォームの位置設定
14    ''' </summary>
15    ''' <param name="frmDes">対象のフォーム</param>
16    ''' <param name="pos">位置</param>
17    Private Sub SetWindowPosition(ByVal frmDes As Form, ByVal pos As enmWindowPos)
18 
19        With Screen.PrimaryScreen.WorkingArea
20            Select Case pos
21                Case enmWindowPos.Center        '中央
22                    frmDes.Left = (.Width / 2) - (frmDes.Width / 2) + .Left
23                    frmDes.Top = (.Height / 2) - (frmDes.Height / 2) + .Top
24 
25                Case enmWindowPos.TopLeft       '左上
26                    frmDes.Left = 0
27                    frmDes.Top = 0
28 
29                Case enmWindowPos.TopRight      '右上
30                    frmDes.Left = .Width - frmDes.Width
31                    frmDes.Top = 0
32 
33                Case enmWindowPos.BottomLeft    '左下
34                    frmDes.Left = 0
35                    frmDes.Top = .Height - frmDes.Height
36 
37                Case enmWindowPos.BottomRight   '左下
38                    frmDes.Left = .Width - frmDes.Width
39                    frmDes.Top = .Height - frmDes.Height
40            End Select
41        End With
42    End Sub
43 
44    ''' <summary>
45    ''' ボタンクリックイベント
46    ''' </summary>
47    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
48        'チェックするラジオボタン
49        Dim arrRdo As RadioButton() = {Me.rdoTopLeft, Me.rdoTopRight, Me.rdoCenter, Me.rdoBottomLeft, Me.rdoBottomRight}
50        For Each rdo As RadioButton In arrRdo
51            If rdo.Checked = True Then
52                'Tagより位置設定指示を取得
53                Dim enmPos As enmWindowPos = CType(rdo.Tag, enmWindowPos)
54                'ウインドウ設定
55                Call Me.SetWindowPosition(Me, enmPos)
56                Exit For
57            End If
58        Next
59    End Sub
60 
61    ''' <summary>
62    ''' フォームロードイベント
63    ''' </summary>
64    Private Sub frmPosition_Load(sender As Object, e As EventArgs) Handles Me.Load
65        'ラジオボタンのTagにウインドウ位置Enum設定
66        Me.rdoTopLeft.Tag = enmWindowPos.TopLeft
67        Me.rdoTopRight.Tag = enmWindowPos.TopRight
68        Me.rdoCenter.Tag = enmWindowPos.Center
69        Me.rdoBottomLeft.Tag = enmWindowPos.BottomLeft
70        Me.rdoBottomRight.Tag = enmWindowPos.BottomRight
71    End Sub
72End Class

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

総アクセス数