Вы рисуете прямоугольники GDI + на форме во время события рисования? Форма не будет иметь представления о том, что вы создаете объекты вне ограничивающего пространства, и, следовательно, не будет знать, что вам нужно прокручивать.
Вам необходимо добавить полосу прокрутки в форму, а затем вычислить значение \ положение полосы прокрутки и использовать ее, чтобы определить, какая часть ваших прямоугольников будет нарисована при событии рисования. Это потребует немного ручного усилия. Вы можете нарисовать их все в растровом изображении в памяти соответствующего размера, а затем просто скопировать его части в форму при рисовании.
Или:
Если вы хотите, чтобы форма делала это для вас, создайте пользовательский элемент управления прямоугольником и поместите 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);
}
}