C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■92871 / )  TableLayoutにぴったり収まるサイズの取得方法
□投稿者/ ロボ (1回)-(2019/11/04(Mon) 20:33:56)

分類:[.NET 全般] 

いま、2行、1列のTableLayoutをフォーム上に配置しており、
これの2行目のセル内にぴったり収まるように
PictureBoxを配置したいと考えています。

PictureBoxのアスペクト比は決まっており、
もし、セルの幅か高さがフィットするように配置したいと考えています。
つまり、PictureBoxの方がセルよりも幅が狭い場合には、
両脇にスペースができ、
高さが小さい場合には、上下にスペースを作るようなかたちにしたいと考えています。



        Dim TL_Height As Integer = TableLayoutPanel1.GetRowHeights(1)

        Dim TL_Width As Integer = TableLayoutPanel1.GetColumnWidths(0)


のようにして配置したいセルの高さを幅を取得できます。

そして、


        Dim SetSize As Size

        If TL_Height / TL_Width > ImageAspect Then

            SetSize.Width = TL_Width
            SetSize.Height = CInt(SetSize.Width * ImageAspect)

        Else

            SetSize.Height = TL_Height
            SetSize.Width = CInt(SetSize.Height / ImageAspect)

        End If


        PictureBox1.Size = SetSize

のようにしてサイズを設定します。

例えば、以下のパラメータの時、

TL_Height = 527
TL_Width = 900

ImageAspect = 1.001

設定するサイズは以下のように求まります。

SetSize.Width = 526
SetSize.Height = 527

しかし、

PictureBox1.Size = SetSize

で設定した後の実際のPictureBox1のサイズを取得すると以下のようになります。

PictureBox1.Size.Width = 526
PictureBox1.Size.Height = 521

なぜか、TableLayoutのセルの高さよりも6ピクセル小さな値が使われています。

TableLayoutには罫線があるため
それの分少なくなったのではないかと思うのですが、
それでも2ピクセルくらいしか変わらないと思います。

どのようにして、521ピクセルの値が求まるのでしょうか?

セルのClientSizeのようなものの求め方があればお教えください。

返信 編集キー/


管理者用

- Child Tree -