Vb.net 不一致的TableLayoutPanel调整大小行为

Vb.net 不一致的TableLayoutPanel调整大小行为,vb.net,tablelayoutpanel,Vb.net,Tablelayoutpanel,我有两个TableLayout面板,一个放在窗体上的另一个上面。它们各自具有相同数量的列(在运行时创建),这些列彼此对齐。它们不是停靠的,而是锚定在父TLP中。 当我调整表单大小时,大多数情况下,两个TLP一起调整大小并精确对齐。如果我多次调整大小(通常在5到10之间),TLP的大小将不同步,列将不再对齐。如果我再次调整大小,问题通常会消失 布局不包含任何控件,而是绘制。Layout_日历已绘制,可能包含许多在运行时添加的控件。CellPaint事件已完成,没有错误 TLP由以下列填充:

我有两个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,并在这个过程中为自己创建了一大堆与滚动条相关的问题。我想我只需要深吸一口气,然后慢慢来。