【发布时间】:2020-03-09 03:48:59
【问题描述】:
默认情况下,我有一个 1 列和 3 行的 TableLayoutPanel。顶行和底行有包含按钮的子 TableLayoutPanel,而中间行有一个 TextBox。顶部和底部行中的按钮在加载时根据 My.Settings 中的值动态显示,默认情况下有五个按钮(因此有五列)。
我动态设置按钮的文本以及是否要删除它们的方式是这样的(再重复四次):
Dim visibleButtonCount As Integer = {My.Settings.ValueVisible1, My.Settings.ValueVisible2, My.Settings.ValueVisible3, My.Settings.ValueVisible4, My.Settings.ValueVisible5}.Where(Function(setting) setting).Count()
Dim buttonWidth As Double = 100 / visibleButtonCount
ButtonValueDown1.Text = $"- {My.Settings.Value1.ToString("N3")}"
ButtonValueUp1.Text = $"+ {My.Settings.Value1.ToString("N3")}"
If (Not My.Settings.ValueVisible1) Then
ButtonValueDown1.Parent.Controls.Remove(ButtonValueDown1)
ButtonValueUp1.Parent.Controls.Remove(ButtonValueUp1)
With TableLayoutPanelDown.ColumnStyles.Item(0)
.SizeType = SizeType.Absolute
.Width = 0
End With
With TableLayoutPanelUp.ColumnStyles.Item(0)
.SizeType = SizeType.Absolute
.Width = 0
End With
Else
TableLayoutPanelDown.ColumnStyles.Item(0).Width = buttonWidth
TableLayoutPanelUp.ColumnStyles.Item(0).Width = buttonWidth
End If
我遇到的问题是,每当所有 5 个按钮都可见时,顶行和底行中最右边的按钮与中间行中的 TextBox 齐平但是只要有一个或更多按钮被删除最右边的按钮不再齐平(见图)。
这可能是什么原因造成的?值得一提的是,所有控件的边距/内边距均为 0。
【问题讨论】:
-
TableLayoutPanelUp.ColumnStyles(0).SizeType = SizeType.AutoSize TableLayoutPanelUp.Refresh() -
我的意思是,假设
TableLayoutPanelUp.Dock = Fill。 -
@Jimi 谢谢你,我今晚一回家就试试这个。我担心按钮的宽度不会全部相同(例如,一个会比其他按钮长得多),这就是我尝试设置百分比的原因。
-
这就是
.SizeType = SizeType.AutoSize的原因。 TLP 自动设置百分比。 -
@Jimi - 每当我实施您的建议时,按钮的宽度都相同,但它们都小于填充剩余空间所需的宽度。不确定它是否值得一提,但 TableLayoutPanel 和按钮已停靠以填充并且 TableLayoutPanel AutoSize 为 true。
标签: .net vb.net winforms tablelayoutpanel