How to set cell size of TableLayoutPanel

I am trying to do TableLayoutPanel

with PictureBox

+ Label

in each cell. I'm fine, but I can't set the cell sizes to be the same! I am trying to have 4 columns with an infinite number of rows, and I would like the cell to be wide Label

if the width is Label

less than the width Picture

.

At the moment my code is working really well, it just doesn't set the cell size because I have no idea how to do it.

Here is my code:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim movieN As Integer = MoviesDataSet.movies.Rows.Count
    Dim tablePanel As New TableLayoutPanel

    With tablePanel
        .Size = New Point(650, 450)
        .ColumnCount = 4
        .GrowStyle = TableLayoutPanelGrowStyle.AddRows
        .AutoScroll = True
        .Margin = New System.Windows.Forms.Padding(0)
        .Location = New System.Drawing.Point(5, 50)
        .CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset
    End With


    For Each MovieRow As DataRow In MoviesDataSet.Tables("movies").Rows
        'define two new controls to be added
        Dim myLabel As New Label
        Dim myPicture As New PictureBox
        Dim container As New Panel

        'set the properties of the new controls
        myLabel.Text = MovieRow("movieName")
        myLabel.Location = New System.Drawing.Point(30, 110)
        With myPicture
            .Image = Image.FromFile(MovieRow("moviePhoto"))
            .Tag = MovieRow("ID")
            .Size = New System.Drawing.Size(100, 100)
            .SizeMode = PictureBoxSizeMode.StretchImage
            .Location = New System.Drawing.Point(2, 2)
        End With

        'here we add the controls to a flow layout panel to
        'manage the positioning of the controls but you could
        'explicitly set the location of the controls if you 
        'just wanted to add them to the forms controls collection
        With container
            .Dock = DockStyle.Fill
            .Margin = New System.Windows.Forms.Padding(0)
            .Controls.Add(myPicture)
            .Controls.Add(myLabel)
        End With


        With tablePanel.Controls
            .Add(container)
        End With

        'here we add a handler for the picture boxs click event
        AddHandler myPicture.Click, AddressOf MyPictureClickEvent
        AddHandler myPicture.MouseHover, AddressOf MyPictureHoverEvent
    Next
    Me.Controls.Add(tablePanel)
End Sub

      

+3


source to share


1 answer


If you want the width of the cell to be the same as the wider PictureBox

or Label

, and you put them in one cell by wrapping them in Panel

, then set the Panel

AutoSizeMode property AutoSizeMode.GrowAndShrink

and its AutoSize to True

. If you then do the same for TableLayoutPanel

, it will cause each cell to grow or shrink depending on the size Panel

, and Panel

will do the same depending on the size of the controls inside it.



0


source







All Articles