2020/11/12(Thu) 10:19:53 編集(投稿者)
■No96331 (紐 さん) に返信
> TableLayoutPanelの中に画像を表示したPictureBoxが入っています。
> ウインドウサイズを変えた時に、アスペクト比を変えずに
> PictureBoxサイズをTableLayoutPanelのサイズにフィットさせたいと考えています。
TableLayoutPanel を使うときは、位置や大きさを Dock や Anchor に任せたほうが楽かと思います。
自分だったら表示するためのカスタムコントロールを作り、Dock = DockStyle.Fill にして配置します。
下のコードは、画像のアスペクト比を保ったまま表示するカスタムコントロールの例です。
Public Class KeepAspecctPictureBox
Inherits PictureBox
Public Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
SetStyle(ControlStyles.ResizeRedraw, True)
End Sub
Protected Overrides Sub OnPaint(pe As PaintEventArgs)
Using b As New SolidBrush(BackColor)
pe.Graphics.FillRectangle(b, ClientRectangle)
End Using
If Image Is Nothing Then
Return
End If
Dim cs As Size = ClientSize
Dim imageSize As Size = Image.Size
Dim drawWidth As Integer
Dim drawHeight As Integer
'If cs.Width / cs.Height > imageSize.Width / imageSize.Height Then
If cs.Width * imageSize.Height > imageSize.Width * cs.Height Then
drawHeight = cs.Height
drawWidth = CInt(cs.Height * imageSize.Width / imageSize.Height)
Else
drawWidth = cs.Width
drawHeight = CInt(cs.Width * imageSize.Height / imageSize.Width)
End If
pe.Graphics.DrawImage(Me.Image, New Rectangle(0, 0, drawWidth, drawHeight))
End Sub
End Class