首页 > 解决方案 > 在滚动期间向可滚动面板添加控件会破坏网格

问题描述

我试图scrollable panel通过循环和计算坐标来填充图片框以绘制漂亮的网格,但是当我在绘图期间开始滚动时(我正在绘制例如 50 个元素,每个元素之间有 500 毫秒的延迟),然后它变得一团糟,但我不确定如何对“面板内的坐标”进行操作

当我不滚动时,一切都很好:

在此处输入图像描述

但是当我开始滚动时,它的行为是这样的:

在此处输入图像描述

这是我绘制每个元素的代码:

public int X { get; set; } = 0;
public int Y { get; set; } = 200;

private void DrawImage(Image image)
{
    var height = 100;             // height of row
    var width = panel1.Width / 5; // 5 elements per row

    var picbox = new PictureBox();
    picbox.Location = new Point(X, Y);
    picbox.Name = $"image{_images.Count}";
    picbox.Image = image.Bitmap;
    picbox.Height = height;
    picbox.Width = width;

    panel1.Controls.Add(picbox);

    X += width;

    if (X >= panel1.Width)
    {
        Y += height;
        X = 0;
    }
}

当我表演时:

this.panel1.Controls.Cast < Control >().Where(x => x.Name.Contains("image")).Select(x => x.Location).ToList()

然后我注意到滚动“上面的图像”的坐标后变为负数:

在此处输入图像描述

那么,我怎样才能在面板内的坐标上操作,而不是屏幕呢?

标签: c#winforms

解决方案


只需将 PictureBoxes 添加到网格中,ONCE,计算它们的初始位置,同时忽略滚动方面。将面板的AutoScroll属性设置为 true,您将获得允许您滚动的滚动条。无需重新计算位置或任何东西......

@Idle_Mind 这是一个很好的提示,谢谢!– 阿克赛利


推荐阅读