winforms上的位置属性很奇怪

时间:2018-01-02 21:44:02

标签: vb.net winforms spacing

我有一个表单,我允许用户通过按"添加"来生成面板中包含各种内容的多个面板。按钮。根据用户在面板中的操作,面板会增大和缩小以适应内容。由于这个变化是大小,我创建了一个子格式化窗体上的面板。

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)将是当前视图的左上角?必须有一些我不知道的位置奇怪的属性。

谢谢

1 个答案:

答案 0 :(得分:2)

此行为与面板无关,而与包含AutoScroll = True的{​​{1}}和Anchor的表单上的任何控件无关。 (注意:如果Top还没有包含Anchor,我在第一次调用函数时会有一些奇怪的定位。

解决方案是described here,即使用AutoScrollPosition。如果将startPoint更改为此值,则会调整滚动位置。

Left

AutoScrollPosition的文档说明了这一点:

  

以编程方式向表单添加控件时,使用AutoScrollPosition属性将控件定位在当前可查看滚动区域的内部或外部。