您在绘制事件期间在窗体上绘制gdi+矩形?窗体不知道您正在剪切空间之外创建对象,因此不知道您需要滚动。
您需要向窗体中添加一个滚动条,然后计算滚动条的值\位置,并使用该值确定绘制事件时要绘制的矩形的哪个部分。这需要一些人工的努力。您可以将它们全部绘制成适当大小的内存位图,然后在绘制时将其部分复制到表单。
或:
如果希望窗体为您执行此操作,请创建一个自定义矩形控件,并在窗体上放置200个控件。由于它们是组件,并且具有具体的高度和宽度,因此表单将知道需要滚动,并且如果设置了AutoScroll,则会相应地进行滚动。
可以这么简单:
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);
}
}