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

わんくま同盟

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

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


(過去ログ 167 を表示中)
■96331 / )  TableLayoutPanelに入ったPictureBox
□投稿者/ 紐 (1回)-(2020/11/11(Wed) 19:34:00)

分類:[.NET 全般] 

VB.NETに関する質問です。

TableLayoutPanelの中に画像を表示したPictureBoxが入っています。
ウインドウサイズを変えた時に、アスペクト比を変えずに
PictureBoxサイズをTableLayoutPanelのサイズにフィットさせたいと考えています。



    'フォームのサイズを変更したときに、PictureBoxサイズが追随して変更するようにする
    Public Sub Form1_SizeChanged() Handles MyBase.SizeChanged

        Call SetPictureBox()

    End Sub


    Private Sub SetPictureBox()

        Dim TL As Size

        TL.Height = frm.TableLayoutPanel9.GetRowHeights(1) - PBox.Margin.Size.Height
        TL.Width = frm.TableLayoutPanel9.GetColumnWidths(0) - PBox.Margin.Size.Width


        Dim SetSize As Size

        Dim BoundaryWidth As Integer = PictureBox1.Width - PictureBox1.ClientSize.Width

        If TL.Height / TL.Width > 1 Then

            SetSize.Width = TL.Width
            SetSize.Height = CInt((SetSize.Width - BoundaryWidth) * ImageAspect) + BoundaryWidth

        Else

            SetSize.Height = TL.Height
            SetSize.Width = CInt((SetSize.Height - BoundaryWidth) / ImageAspect) + BoundaryWidth

        End If


        PictureBox1.Size = SetSize

        PictureBox1.Invalidate()


    End Sub


こんな感じのコードでフィットさせることはできているのですが、
ウインドウサイズを変えた時に
TableLayoutPanelのサイズ変化してから少し遅れてから、
PictureBoxの中身のサイズも変化するため、少しぎこちない感じがします。

これらを同時に更新したいのですが
どのようにすれば良いですか?

Me.SuspendLayout()
Me.ResumeLayout()

の辺りを試してみたのですが
うまくいきませんでした。

どのようなコードなら良いでしょうか?

返信 編集キー/


管理者用

- Child Tree -