Vb.net 不一致的TableLayoutPanel调整大小行为
我有两个TableLayout面板,一个放在窗体上的另一个上面。它们各自具有相同数量的列(在运行时创建),这些列彼此对齐。它们不是停靠的,而是锚定在父TLP中。 当我调整表单大小时,大多数情况下,两个TLP一起调整大小并精确对齐。如果我多次调整大小(通常在5到10之间),TLP的大小将不同步,列将不再对齐。如果我再次调整大小,问题通常会消失 布局不包含任何控件,而是绘制。Layout_日历已绘制,可能包含许多在运行时添加的控件。CellPaint事件已完成,没有错误 TLP由以下列填充:Vb.net 不一致的TableLayoutPanel调整大小行为,vb.net,tablelayoutpanel,Vb.net,Tablelayoutpanel,我有两个TableLayout面板,一个放在窗体上的另一个上面。它们各自具有相同数量的列(在运行时创建),这些列彼此对齐。它们不是停靠的,而是锚定在父TLP中。 当我调整表单大小时,大多数情况下,两个TLP一起调整大小并精确对齐。如果我多次调整大小(通常在5到10之间),TLP的大小将不同步,列将不再对齐。如果我再次调整大小,问题通常会消失 布局不包含任何控件,而是绘制。Layout_日历已绘制,可能包含许多在运行时添加的控件。CellPaint事件已完成,没有错误 TLP由以下列填充:
Layout_Calendar.ColumnStyles.Clear()
Layout_Dates.Width = Layout_Calendar.Width
Layout_Dates.ColumnStyles.Clear()
For i = 0 To MyColumnCount - 1
Layout_Calendar.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, DayPercent))
Layout_Dates.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, DayPercent))
Next
' make last column autosize
Layout_Calendar.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.AutoSize))
Layout_Dates.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.AutoSize))
Layout_Calendar.ColumnCount = Layout_Calendar.ColumnStyles.Count
Layout_Dates.ColumnCount = Layout_Dates.ColumnStyles.Count
我有两个,因为一个垂直滚动,另一个不垂直滚动
我对两个面板的cellpaint事件都有“try-catch”语句,这两个面板都不会引发异常
我曾尝试在运行时检查列宽,但这些列宽以%为单位,并且没有改变
我已将其放在表单调整事件中:
Layout_Dates.PerformLayout()
Layout_Calendar.PerformLayout()
有人知道如何:
a) 防止这种情况发生?
b) 以编程方式确定这是在运行时发生的?
c) 什么时候处理它?你并不是第一个发现自动布局有一些尖锐边缘的程序员。核心问题是布局是双稳定的,这是由于滚动条在启用时会占用空间。需要多个布局通道来处理该问题。这可能永远不会完成的严重故障模式,在两个同样有效的布局选择之间来回切换。微软通过只允许一次通过来解决这个问题,这会有你观察到的副作用。通过手动调整大小,可以触发另一个过程。您确实需要使用SizeType.Absolute才能取得成功。感谢您的解释@Hans Passant,我已将其更改为Absolute,并在这个过程中为自己创建了一大堆与滚动条相关的问题。我想我只需要深吸一口气,然后慢慢来。