我有一个表单,我允许用户通过按"添加"来生成面板中包含各种内容的多个面板。按钮。根据用户在面板中的操作,面板会增大和缩小以适应内容。由于这个变化是大小,我创建了一个子格式化窗体上的面板。
Private Sub formatPanels(frm As Form)
Dim count As Integer = 0
Dim startPoint As Point = New Point(12, 80)
Dim endPoint As Point = New Point(0, 0)
Dim maxY As Integer = 0
For Each pnl As Control In frm.Controls
If TypeOf pnl Is Panel Then
ReDim Preserve _arr_Panels(count)
_arr_Panels(count) = pnl
count += 1
pnl.Location = startPoint
startPoint.Y += pnl.Size.Height + 30
End If
Next
End Sub
正如您所看到的,我们遍历每个面板,第一个始终从位置(12,80)开始,然后随着面板的大小和一些间距递增。
这是问题。这只发生在我滚动表格时。面板突然间隔开,并决定将第一个面板放在表格上数百个像素。位置属性是否基于您正在查看的内容?因此,如果我向下滚动表单位置(0,0)将是当前视图的左上角?必须有一些我不知道的位置奇怪的属性。
谢谢
答案 0 :(得分:2)
此行为与面板无关,而与包含AutoScroll = True
的{{1}}和Anchor
的表单上的任何控件无关。 (注意:如果Top
还没有包含Anchor
,我在第一次调用函数时会有一些奇怪的定位。
解决方案是described here,即使用AutoScrollPosition。如果将startPoint更改为此值,则会调整滚动位置。
Left
AutoScrollPosition的文档说明了这一点:
以编程方式向表单添加控件时,使用AutoScrollPosition属性将控件定位在当前可查看滚动区域的内部或外部。