У вас в коде ошибка в использовании
this.AutoScrollPosition.
Вот:
private void tumbView_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
int curY = 10 + (sender as ScrollableControl).AutoScrollPosition.Y;
Pen p = new Pen(Color.Green, 4);
for (int i = 0; i < 100; i++)
{
e.Graphics.DrawRectangle(p, 10, curY, 80, 60);
curY += 65;
}
p.Dispose();
}
В принципе это правильней делать в самом UserControl контроле :
Например так:
public class TumbView : UserControl
{
public TumbView()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint| ControlStyles.UserPaint|ControlStyles.DoubleBuffer,true);
this.AutoScroll = true;
this.AutoScrollMinSize = new Size(90,(65)*100+15);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int curY = 10 + this.AutoScrollPosition.Y;
Pen p = new Pen(Color.Green, 4);
for (int i = 0; i < 100; i++)
{
e.Graphics.DrawRectangle(p, 10, curY, 80, 60);
curY += 65;
}
p.Dispose();
}
}
Ну и последнее. Вы слишком много рисуете, конечно, код который выходит за границы области рисования не нарисует сам DC (Graphics). Но можно сделать проверку самому (рисовать только в invalidate области) — и увеличить производительность.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение