1

这是我的代码:

int ypos = 0;

public void X()
{
    MovieItem NewMovie = new MovieItem();
    NewMovie.SearchMovie(txtSearch.Text);
    NewMovie.Location = new Point(0, ypos);
    ypos += 196;

    panel1.Controls.Add(NewMovie);
}

运行方法 X 大约 4,5 次后,添加的第 5 或第 6 项未添加到应添加的位置,而是在下面加载。

图像清晰:

一开始看起来如何正确替代文字

过了一会 ,它看起来是怎样的:替代文字

我做错了什么,它不能很好地工作?

编辑: 我使用了断点,发现问题出现在第五部电影上,当时 ypos 变量在 980 左右。为什么会这样?它只是跳过了它看起来的那个位置。

4

2 回答 2

4

好的,当AutoScroll面板的属性设置为true并且滚动条不在其初始位置时出现问题:0。面板将控件定位在ypos + vertical position of scroll bar!!

AutoScroll = false;在添加之前设置MovieItem然后true;在之后设置,但这将重置滚动条位置
,或者在设置位置时减去滚动条ypos位置。

两者都解决了问题,但第二个更好(没有滚动条重置):

public void X()
{
    int vscrollPos = panel1.VerticalScroll.Value;   

    MovieItem NewMovie = new MovieItem();
    NewMovie.SearchMovie(txtSearch.Text);
    NewMovie.Location = new Point(0, ypos - vscrollPos);
    ypos += 196;

    panel1.Controls.Add(NewMovie);
}
于 2009-10-20T23:43:13.603 回答
1

我不知道你的类结构是怎样的,但那个空白看起来是关于其他控件的组成。也许在某个地方找不到电影,因此什么也没有放映?

于 2009-10-20T23:15:27.397 回答