c# - 在滚动期间向可滚动面板添加控件会破坏网格
问题描述
我试图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()
然后我注意到滚动“上面的图像”的坐标后变为负数:
那么,我怎样才能在面板内的坐标上操作,而不是屏幕呢?
解决方案
只需将 PictureBoxes 添加到网格中,ONCE,计算它们的初始位置,同时忽略滚动方面。将面板的AutoScroll属性设置为 true,您将获得允许您滚动的滚动条。无需重新计算位置或任何东西......
@Idle_Mind 这是一个很好的提示,谢谢!– 阿克赛利
推荐阅读
- node.js - node.js process.env 在命令行中不起作用
- python - numpy向量乘法速度?
- ios - Branch.io 通过安装传递自定义数据
- sql - 如何通过删除基于 8 列中的 2 列的重复项来清理 BigQuery 表?
- android - MvvmCross ViewModels 未在 FragmentManager.PopBackstackImmediate() 上销毁
- excel - 使用 IF 和 VLOOKUP 函数的 Excel 公式
- sql - 从 UML 到 SQL (PostgreSQL)
- java - JUnit 5:BeforeEachCallback 和 BeforeTestExecutionCallback 之间的区别
- python - 用标量角张量创建变换矩阵
- python - 如何从熊猫数据框中的文本字段中提取数据?