面板未正确显示所有自定义控件

时间:2014-11-29 07:40:53

标签: vb.net user-controls panel

不确定说出问题的最佳方法,但基本上,我的程序中有一个电影列表,我有一个代表每部电影的自定义控件。

自定义控件如下所示: https://dl.dropboxusercontent.com/u/37005139/MovieListItem.png

因此,对于测试,我正在循环浏览我的电影列表,对于每一个我将此控件添加到坐标(10,yCoord)的面板,然后将面板的高度添加到yCoord。

Panels Autscroll属性设置为true,可以向下滚动电影列表。

但是当我在近400部电影的列表中找到一半时,会发生这种情况: https://dl.dropboxusercontent.com/u/37005139/windowImage.PNG

如你所见,它不会再显示我的电影,甚至无法正确显示。

这就是我将控件添加到面板的方式:

For Each item In files
        Dim newControl As New MovieView(item, Panel1.Width - 28)
        newControl.Location = New Point(10, yCoord)
        Panel1.Controls.Add(newControl)
        yCoord += newControl.Height
Next

是否有人对于造成这种情况或如何纠正这种情况有什么想法?我能想到的唯一一件事就是我内存不足,但它没有抛出任何异常和任务管理器似乎表明我有足够的内存。

谢谢:)

1 个答案:

答案 0 :(得分:1)

    newControl.Location = New Point(10, yCoord)

对于AutoScroll属性设置为True的面板,这是不正确的。似乎工作正常,直到您在面板部分滚动时执行此操作。 Panel类通过更改其子控件的Location属性来实现滚动。在用户有机会操作滚动条之后,在运行时添加控件时,您还必须执行此操作。最常见的是在使用BackgroundWorker之后。如果你没有,那么控件会在错误的位置结束并重叠,就像你的图像所示。修正:

    newControl.Location = New Point(10 + Panel1.AutoScrollPosition.X, _
                                yCoord + Panel1.AutoScrollPosition.Y)

FlowLayoutPanel非常方便,它可以自动执行此操作。