在绘制对象时Winform不滚动

C#3.0,.net framework 3.5我正在绘制(使用图形类中的draw方法)窗口上的许多实心矩形垂直构造。 表格从500 x 500像素开始,矩形只在运行时从网络下载数据后绘制 – 矩形的数量取决于下载,所以我不知道它是在前面。

因此,只有几个矩形被绘制,因为窗体的大小是固定的。 所以我用google搜索/ Binged(以免有人建议我这样做)并找到一些提示,但它们在这种情况下不起作用 – 比如将表单AutoScroll属性设置为true或尝试双缓冲。我也试图在列表框控件上绘图并设置它的滚动属性等…但没有骰子。

我猜测没有办法显示,使用绘图在窗体上垂直地说200个矩形。 我需要一些其他的解决方案……请任何想法。

也许是一个图片盒列表然后用纯色填充每个图片框?

谢谢

你在绘画活动期间在表格上绘制GDI +矩形? 表单不知道您是在剪辑空间之外创建对象,因此不知道您需要滚动。

您需要向表单添加一个滚动条,然后计算滚动条的值\位置,并使用它来确定要在paint事件上绘制的矩形部分。 这将涉及一些手动努力。 您可以将它们全部绘制到适当大小的内存中位图,然后在绘制时将其部分复制到表单中。

要么:

如果您希望表单为您执行此操作,请创建一个自定义矩形控件并在表单上放置200个。 由于它们是组件并且具有具体的高度和宽度,因此表单将知道它需要滚动,并且如果设置了自动滚动则相应地这样做。

它可以像这样简单:

public partial class Form1 : Form { public Form1() { InitializeComponent(); this.DoubleBuffered = true; this.AutoScroll = true; for (int i = 0; i < 100; i++) this.Controls.Add(new Rectangle() { Top = i * 120, Left = 10 }); } } public class Rectangle : Control { public Rectangle() { this.Width = 100; this.Height = 100; } protected override void OnPaint(PaintEventArgs e) { e.Graphics.DrawRectangle(new Pen(Color.Black, 5), 0, 0, 100, 100); } }