'***************************************************************************************************
' フォーム用DPI調整機能共通プロシージャ modFormDpiMgr3(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 14/08/27(1.8.0.0)新規作成
' 14/11/07(1.8.2.4)GP_AdjustFormSizeByDpiSubでTabControlのタイトル部のサイズを調整を追加
' 14/11/07(1.8.2.4)フォームやパネルの最小・最大サイズの対応を追加
' 15/08/25(1.10.1.0)GroupBoxのBorderColor調整を追加
' 17/09/27(1.11.0.0)入力コントロールの文字列全選択対応をEnter⇒GotFocusに変更する対応
' 18/11/29(1.12.0.0)不要なモジュール変数を削除⇒モジュール名変更
'***************************************************************************************************
Module modFormDpiMgr1
'-----------------------------------------------------------------------------------------------
' 標準DPI設定
Private Const g_cnsStandardDPI As Single = 96 ' 標準DPI値
' 利用者DPIによる拡大率
Friend g_sngMagnifyingPowerX As Single = 1.0F ' DPI拡大率(横)
Friend g_sngMagnifyingPowerY As Single = 1.0F ' DPI拡大率(縦)
'対象フォーム
Private g_objForm As Object = Nothing ' 親フォーム
'***********************************************************************************************
' ■■■ サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :GP_AdjustFormSizeByDpi
'* 機能 :DPI値によるフォーム/コントロールの位置・サイズ調整
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 対象フォーム(Form)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年08月27日
'* 作成者 :井上 治
'* 更新日 :2018年11月29日
'* 更新者 :井上 治
'* 機能説明:入力系コントロールがある場合に使用(Enterイベントで全選択にする対応を含む)
'* 注意事項:DataGridViewの列幅調整は本処理の後で行なうこと
'***********************************************************************************************
Friend Sub GP_AdjustFormSizeByDpi(ByVal objForm As Object)
'-------------------------------------------------------------------------------------------
' DPI値によるフォーム/コントロールの位置・サイズ調整
Call GP_AdjustFormSizeByDpi3(objForm)
'-------------------------------------------------------------------------------------------
' 入力コントロールの文字列を全選択状態にする(再帰処理)
Call GP_EntryControlsAddHandlerSub(g_objForm)
End Sub
'***********************************************************************************************
'* 処理名 :GP_AdjustFormSizeByDpi3
'* 機能 :DPI値によるフォーム/コントロールの位置・サイズ調整
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 対象フォーム(Form)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年08月27日
'* 作成者 :井上 治
'* 更新日 :2018年11月29日
'* 更新者 :井上 治
'* 機能説明:入力系コントロールがない場合に使用
'* 注意事項:DataGridViewの列幅調整は本処理の後で行なうこと
'***********************************************************************************************
Friend Sub GP_AdjustFormSizeByDpi3(ByVal objForm As Object)
'-------------------------------------------------------------------------------------------
g_objForm = objForm
' 利用者DPI設定の確認
Dim sngUserDpiX As Single = objForm.CreateGraphics.DpiX ' DPI値(横)
Dim sngUserDpiY As Single = objForm.CreateGraphics.DpiY ' DPI値(縦)
'-------------------------------------------------------------------------------------------
' 標準(96DPI)でない場合はフォント調整を行なう
If ((sngUserDpiX > g_cnsStandardDPI) OrElse (sngUserDpiY > g_cnsStandardDPI)) Then
' 利用者DPIによる拡大率の算出
g_sngMagnifyingPowerX = sngUserDpiX / g_cnsStandardDPI
g_sngMagnifyingPowerY = sngUserDpiY / g_cnsStandardDPI
' フォームのサイズを調整
With CType(g_objForm, Form)
' 最大サイズの調整
.MaximumSize = FP_GetMagnifyingSize(.MaximumSize)
' フォームのサイズ調整
.Size = FP_GetMagnifyingSize(.Size)
' 最小サイズの調整
.MinimumSize = FP_GetMagnifyingSize(.MinimumSize)
End With
' 各コントロールの位置・サイズ調整(再帰処理)
Call GP_AdjustFormSizeByDpiSub(g_objForm)
End If
End Sub
'***********************************************************************************************
' ■■■ 共通サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :GP_AdjustFormSizeByDpiSub
'* 機能 :DPI値によるコントロールの位置・サイズ調整(サブ処理)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 所属するコンテナ(Object)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年08月26日
'* 作成者 :井上 治
'* 更新日 :2015年08月25日
'* 更新者 :井上 治
'* 機能説明:コンテナ上の各コントロールの位置・サイズ調整
'* 注意事項:本処理は再帰動作
'***********************************************************************************************
Private Sub GP_AdjustFormSizeByDpiSub(ByVal objContainer As Object)
'-------------------------------------------------------------------------------------------
' コントロールの種別によって処理を切り分け
For Each objCont As Control In objContainer.Controls
' コンテナを優先
If TypeOf objCont Is TabControl Then
'-----------------------------------------------------------------------------------
' タブコントロール
With CType(objCont, TabControl)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
' 各タブページのタイトル部のサイズを調整
.ItemSize = FP_GetMagnifyingSize(.ItemSize)
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is TabPage Then
'-----------------------------------------------------------------------------------
' タブページ(Dockプロパティ無し=再帰のみ)
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is Panel Then
'-----------------------------------------------------------------------------------
' パネル
With CType(objCont, Panel)
' 最大サイズの調整
.MaximumSize = FP_GetMagnifyingSize(.MaximumSize)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
' 最小サイズの調整
.MinimumSize = FP_GetMagnifyingSize(.MinimumSize)
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is GroupBox Then
'-----------------------------------------------------------------------------------
' グループボックス
With CType(objCont, GroupBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is TableLayoutPanel Then
'-----------------------------------------------------------------------------------
' タブレイアウトパネル
With CType(objCont, TableLayoutPanel)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is FlowLayoutPanel Then
'-----------------------------------------------------------------------------------
' フローレイアウトパネル
With CType(objCont, FlowLayoutPanel)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is SplitContainer Then
'-----------------------------------------------------------------------------------
' スプリットコンテナ
With CType(objCont, SplitContainer)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
ElseIf TypeOf objCont Is UserControl Then
'-----------------------------------------------------------------------------------
' ユーザーコントロール
With CType(objCont, UserControl)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
' コンテナ時は再帰呼び出し
Call GP_AdjustFormSizeByDpiSub(objCont)
'===================================================================================
' 以下は非コンテナ
ElseIf TypeOf objCont Is TextBox Then
'-----------------------------------------------------------------------------------
' テキストボックス(高さの調整は複数行仕様時のみ)
With CType(objCont, TextBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Width = .Width * g_sngMagnifyingPowerX
If .Multiline Then
.Height = .Height * g_sngMagnifyingPowerY
End If
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
If .Multiline Then
.Height = .Height * g_sngMagnifyingPowerY
End If
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is Label Then
'-----------------------------------------------------------------------------------
' ラベル(AutoSize時は位置のみ)
With CType(objCont, Label)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
If Not .AutoSize Then
.Size = FP_GetMagnifyingSize(.Size)
Select Case g_sngMagnifyingPowerX
Case 1.25F
If .Height = 25 Then .Height = 24
Case 1.5F
If .Height = 30 Then .Height = 27
End Select
End If
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
If Not .AutoSize Then
.Height = .Height * g_sngMagnifyingPowerY
Select Case g_sngMagnifyingPowerX
Case 1.25F
If .Height = 25 Then .Height = 24
Case 1.5F
If .Height = 30 Then .Height = 27
End Select
End If
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
If Not .AutoSize Then
.Width = .Width * g_sngMagnifyingPowerX
End If
End Select
End With
ElseIf TypeOf objCont Is ComboBox Then
'-----------------------------------------------------------------------------------
' コンボボックス(幅のみ)
With CType(objCont, ComboBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Width = .Width * g_sngMagnifyingPowerX
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is DataGridView Then
'-----------------------------------------------------------------------------------
' DataGridView
Dim COL As Integer = 0
With CType(objCont, DataGridView)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
' DataGridViewは列幅も調整
Do While COL < .Columns.Count
With .Columns(COL)
.Width = .Width * g_sngMagnifyingPowerX
End With
COL += 1
Loop
.ColumnHeadersHeight = .ColumnHeadersHeight * g_sngMagnifyingPowerY
.RowHeadersWidth = .RowHeadersWidth * g_sngMagnifyingPowerX
If .Rows.Count <> 0 Then
Dim GYO As Integer = 0
Do While GYO < .Rows.Count
With .Rows(GYO)
.Height = .Height * g_sngMagnifyingPowerY
End With
GYO += 1
Loop
End If
End With
ElseIf TypeOf objCont Is MaskedTextBox Then
'-----------------------------------------------------------------------------------
' マスクドテキストボックス(幅のみ)
With CType(objCont, MaskedTextBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Width = .Width * g_sngMagnifyingPowerX
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is CheckBox Then
'-----------------------------------------------------------------------------------
' チェックボックス(AutoSize時は位置のみ)
With CType(objCont, CheckBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
If Not .AutoSize Then
.Size = FP_GetMagnifyingSize(.Size)
End If
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
If Not .AutoSize Then
.Height = .Height * g_sngMagnifyingPowerY
End If
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
If Not .AutoSize Then
.Width = .Width * g_sngMagnifyingPowerX
End If
End Select
End With
ElseIf TypeOf objCont Is Button Then
'-----------------------------------------------------------------------------------
' ボタン
With CType(objCont, Button)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is RadioButton Then
'-----------------------------------------------------------------------------------
' ラジオボタン(AutoSize時は位置のみ)
With CType(objCont, RadioButton)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
If Not .AutoSize Then
.Size = FP_GetMagnifyingSize(.Size)
End If
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
If Not .AutoSize Then
.Height = .Height * g_sngMagnifyingPowerY
End If
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
If Not .AutoSize Then
.Width = .Width * g_sngMagnifyingPowerX
End If
End Select
End With
ElseIf TypeOf objCont Is ListBox Then
'-----------------------------------------------------------------------------------
' リストボックス
With CType(objCont, ListBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is LinkLabel Then
'-----------------------------------------------------------------------------------
' リンクラベル(AutoSize時は位置のみ)
With CType(objCont, LinkLabel)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
If Not .AutoSize Then
.Size = FP_GetMagnifyingSize(.Size)
End If
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
If Not .AutoSize Then
.Height = .Height * g_sngMagnifyingPowerY
End If
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
If Not .AutoSize Then
.Width = .Width * g_sngMagnifyingPowerX
End If
End Select
End With
ElseIf TypeOf objCont Is NumericUpDown Then
'-----------------------------------------------------------------------------------
' NumericUpDown(幅のみ)
With CType(objCont, NumericUpDown)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Width = .Width * g_sngMagnifyingPowerX
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is RichTextBox Then
'-----------------------------------------------------------------------------------
' RichTextBox
With CType(objCont, RichTextBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is CheckedListBox Then
'-----------------------------------------------------------------------------------
' CheckedListBox
With CType(objCont, CheckedListBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is DateTimePicker Then
'-----------------------------------------------------------------------------------
' DateTimePicker(幅のみ)
With CType(objCont, DateTimePicker)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Width = .Width * g_sngMagnifyingPowerX
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is ListView Then
'-----------------------------------------------------------------------------------
' ListView
With CType(objCont, ListView)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is TreeView Then
'-----------------------------------------------------------------------------------
' TreeView
With CType(objCont, TreeView)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is MonthCalendar Then
'-----------------------------------------------------------------------------------
' MonthCalendar
With CType(objCont, MonthCalendar)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is ProgressBar Then
'-----------------------------------------------------------------------------------
' ProgressBar
With CType(objCont, ProgressBar)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is WebBrowser Then
'-----------------------------------------------------------------------------------
' WebBrowser
With CType(objCont, WebBrowser)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is PictureBox Then
'-----------------------------------------------------------------------------------
' PictureBox
With CType(objCont, PictureBox)
' Dock=Fill以外を調整
Select Case .Dock
Case DockStyle.None
' 位置・サイズを調整
.Left = .Left * g_sngMagnifyingPowerX
.Top = .Top * g_sngMagnifyingPowerY
.Size = FP_GetMagnifyingSize(.Size)
Case DockStyle.Top, DockStyle.Bottom
' 高さのみ調整
.Height = .Height * g_sngMagnifyingPowerY
Case DockStyle.Left, DockStyle.Right
' 幅のみ調整
.Width = .Width * g_sngMagnifyingPowerX
End Select
End With
ElseIf TypeOf objCont Is MenuStrip Then
'-----------------------------------------------------------------------------------
' MenuStrip
With CType(objCont, MenuStrip)
.Height = .Height * g_sngMagnifyingPowerY
End With
ElseIf TypeOf objCont Is StatusStrip Then
'-----------------------------------------------------------------------------------
' StatusStrip
With CType(objCont, StatusStrip)
.Height = .Height * g_sngMagnifyingPowerY
End With
Else
'-----------------------------------------------------------------------------------
' その他
Console.WriteLine("GP_AdjustFormSizeByDpiSubタイプ不明コントロール:" & _
objCont.Name & " /ON:" & objContainer.Name)
End If
Next objCont
End Sub
'***********************************************************************************************
'* 処理名 :FP_GetMagnifyingSize
'* 機能 :DPI制御後のサイズ取得
'-----------------------------------------------------------------------------------------------
'* 返り値 :サイズ(Size)
'* 引数 :Arg1 = 元のサイズ(Size)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年11月07日
'* 作成者 :井上 治
'* 更新日 :2014年11月07日
'* 更新者 :井上 治
'* 機能説明:Width,Heightそれぞれ個々に設定できない場合に使用
'* 注意事項:
'***********************************************************************************************
Private Function FP_GetMagnifyingSize(ByVal objOriginalSize As Size) As Size
'-------------------------------------------------------------------------------------------
Dim intWidth As Integer, intHeight As Integer
intWidth = objOriginalSize.Width * g_sngMagnifyingPowerX
intHeight = objOriginalSize.Height * g_sngMagnifyingPowerY
Return New Size(intWidth, intHeight)
End Function
'***********************************************************************************************
'* 処理名 :GP_EntryControlsAddHandlerSub
'* 機能 :入力コントロールの文字列を全選択状態にする(サブ処理)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = 所属するコンテナ(Object)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年07月07日
'* 作成者 :井上 治
'* 更新日 :2017年09月27日
'* 更新者 :井上 治
'* 機能説明:Enterイベントで初期表示された文字列を全選択状態にする
'* 注意事項:本処理は再帰動作
'***********************************************************************************************
Private Sub GP_EntryControlsAddHandlerSub(ByVal objContainer As Object)
'-------------------------------------------------------------------------------------------
' コントロールの種別によって処理を切り分けてイベント実装
For Each objCont As Control In objContainer.Controls
If TypeOf objCont Is TextBox Then
'-----------------------------------------------------------------------------------
' テキストボックス
AddHandler CType(objCont, TextBox).GotFocus, AddressOf TextBox_GotFocus
ElseIf TypeOf objCont Is ComboBox Then
'-----------------------------------------------------------------------------------
' コンボボックス
AddHandler CType(objCont, ComboBox).GotFocus, AddressOf ComboBox_GotFocus
ElseIf TypeOf objCont Is NumericUpDown Then
'-----------------------------------------------------------------------------------
' NumericUpDown
AddHandler CType(objCont, NumericUpDown).GotFocus, AddressOf NumericUpDown_GotFocus
ElseIf TypeOf objCont Is MaskedTextBox Then
'-----------------------------------------------------------------------------------
' マスクドテキストボックス
AddHandler CType(objCont, MaskedTextBox).GotFocus, AddressOf MaskedTextBox_GotFocus
ElseIf ((TypeOf objCont Is TabControl) OrElse _
(TypeOf objCont Is TabPage) OrElse _
(TypeOf objCont Is Panel) OrElse _
(TypeOf objCont Is GroupBox) OrElse _
(TypeOf objCont Is TableLayoutPanel) OrElse _
(TypeOf objCont Is FlowLayoutPanel) OrElse _
(TypeOf objCont Is SplitContainer) OrElse _
(TypeOf objCont Is UserControl)) Then
'-----------------------------------------------------------------------------------
' コンテナ時は再帰呼び出し
Call GP_EntryControlsAddHandlerSub(objCont)
End If
Next objCont
End Sub
'***********************************************************************************************
'* 処理名 :TextBox_GotFocus
'* 機能 :各入力テキストボックスイベント(GotFocus)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年07月07日
'* 作成者 :井上 治
'* 更新日 :2017年09月27日
'* 更新者 :井上 治
'* 機能説明:初期表示された文字列を全選択状態にする
'* 注意事項:
'***********************************************************************************************
Friend Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
With CType(sender, TextBox)
If Not .ReadOnly AndAlso Not .Multiline Then
.SelectAll()
Else
.Select(0, 0)
End If
End With
End Sub
'***********************************************************************************************
'* 処理名 :ComboBox_GotFocus
'* 機能 :各入力コンボボックスイベント(GotFocus)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年07月07日
'* 作成者 :井上 治
'* 更新日 :2017年09月27日
'* 更新者 :井上 治
'* 機能説明:初期表示された文字列を全選択状態にする
'* 注意事項:
'***********************************************************************************************
Friend Sub ComboBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
With CType(sender, ComboBox)
If .DropDownStyle <> ComboBoxStyle.DropDownList Then
.SelectAll()
End If
End With
End Sub
'***********************************************************************************************
'* 処理名 :NumericUpDown_GotFocus
'* 機能 :各数値入力ボックスイベント(GotFocus)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年07月07日
'* 作成者 :井上 治
'* 更新日 :2017年09月27日
'* 更新者 :井上 治
'* 機能説明:初期表示された文字列を全選択状態にする
'* 注意事項:
'***********************************************************************************************
Friend Sub NumericUpDown_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
With CType(sender, NumericUpDown)
If Not .ReadOnly Then
.Select(0, .Text.ToString.Length)
Else
.Select(0, 0)
End If
End With
End Sub
'***********************************************************************************************
'* 処理名 :MaskedTextBox_GotFocus
'* 機能 :各入力マスクドテキストボックスイベント(GotFocus)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2014年07月07日
'* 作成者 :井上 治
'* 更新日 :2017年09月27日
'* 更新者 :井上 治
'* 機能説明:初期表示された文字列を全選択状態にする
'* 注意事項:
'***********************************************************************************************
Friend Sub MaskedTextBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
With CType(sender, MaskedTextBox)
If Not .ReadOnly AndAlso Not .Multiline Then
.SelectAll()
Else
.Select(0, 0)
End If
End With
End Sub
'---------------------------------------<< End of Source >>-------------------------------------
End Module