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
source to share
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.
source to share