如何在 Visual Basic 2013 (.net) 中自动调整水平对齐面板的大小
How to auto resize horizontally aligned panels in Visual Basic 2013 (.net)
我有 2 个面板并排对齐,如屏幕截图所示。每个面板包含 3-4 个控件。
我想要实现的是 - 当表单大小改变时,面板的大小应该自动调整,保持恒定之间的差距2 个面板。
到目前为止,我已经尝试了两个面板的各种锚点组合,但无法获得理想的结果。
我有点被困在这里。
(我正在使用 Visual Basic 2013)
只需将左侧面板的停靠栏设置为左,右一个为右!
- 将 TableLayoutPanel 拖放到表单上并将
Dock
样式设置为 Fill
。
- 删除最后一行并添加一个新列。
- 将第一列和第三列的style/width列设置为
percent
50%
.
- 将第二列的style/width列设为
absolute
20
.
- 将面板拖放到第一个和第三个单元格并将
Dock
样式设置为 Fill
。
- 在这两个面板中放置您需要的任何控件。
此外,我建议您阅读以下关于如何改进 TLP 渲染的 SO post:
- TableLayoutPanel responds very slowly to events
示例表格:
Public Class Form1
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.TableLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.ColumnCount = 3
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Controls.Add(Me.Panel1, 0, 0)
Me.TableLayoutPanel1.Controls.Add(Me.Panel2, 2, 0)
Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 1
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.TableLayoutPanel1.Size = New System.Drawing.Size(682, 260)
Me.TableLayoutPanel1.TabIndex = 1
'
'Panel1
'
Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel1.Location = New System.Drawing.Point(3, 3)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(325, 254)
Me.Panel1.TabIndex = 0
'
'Panel2
'
Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.Panel2.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel2.Location = New System.Drawing.Point(354, 3)
Me.Panel2.Name = "Panel2"
Me.Panel2.Size = New System.Drawing.Size(325, 254)
Me.Panel2.TabIndex = 1
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(682, 260)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.TableLayoutPanel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents Panel2 As System.Windows.Forms.Panel
End Class
我有 2 个面板并排对齐,如屏幕截图所示。每个面板包含 3-4 个控件。
我想要实现的是 - 当表单大小改变时,面板的大小应该自动调整,保持恒定之间的差距2 个面板。
到目前为止,我已经尝试了两个面板的各种锚点组合,但无法获得理想的结果。 我有点被困在这里。 (我正在使用 Visual Basic 2013)
只需将左侧面板的停靠栏设置为左,右一个为右!
- 将 TableLayoutPanel 拖放到表单上并将
Dock
样式设置为Fill
。 - 删除最后一行并添加一个新列。
- 将第一列和第三列的style/width列设置为
percent
50%
. - 将第二列的style/width列设为
absolute
20
. - 将面板拖放到第一个和第三个单元格并将
Dock
样式设置为Fill
。 - 在这两个面板中放置您需要的任何控件。
此外,我建议您阅读以下关于如何改进 TLP 渲染的 SO post:
- TableLayoutPanel responds very slowly to events
示例表格:
Public Class Form1
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.TableLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.ColumnCount = 3
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
Me.TableLayoutPanel1.Controls.Add(Me.Panel1, 0, 0)
Me.TableLayoutPanel1.Controls.Add(Me.Panel2, 2, 0)
Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 1
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.TableLayoutPanel1.Size = New System.Drawing.Size(682, 260)
Me.TableLayoutPanel1.TabIndex = 1
'
'Panel1
'
Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel1.Location = New System.Drawing.Point(3, 3)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(325, 254)
Me.Panel1.TabIndex = 0
'
'Panel2
'
Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.Panel2.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel2.Location = New System.Drawing.Point(354, 3)
Me.Panel2.Name = "Panel2"
Me.Panel2.Size = New System.Drawing.Size(325, 254)
Me.Panel2.TabIndex = 1
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(682, 260)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.TableLayoutPanel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents Panel2 As System.Windows.Forms.Panel
End Class