Краска на панели с автоматической прокруткой

Я реализую приложение, которое хочет рисовать линии на панели. Но панель должна автоматически прокручиваться, так как ее размер может увеличиваться во время выполнения. Метод рисования панели, который я использовал, показан ниже. Когда я запускаю программу, она рисует линии, но когда я прокручиваю панель вниз, линии ломаются. Как этого избежать?

private void panel1_Paint(object sender, PaintEventArgs e)
{
  this.DoubleBuffered = true;
  Pen P = new Pen(Color.Red);

  for (int i = 0; i < 10; i++) {
    e.Graphics.DrawLine(P, (new Point(i * 40, 0)), (new Point(i * 40, 60 * 40)));
  }
  for (int i = 0; i < 60; i++)
  {
    e.Graphics.DrawLine(P, (new Point(0, i  *40)), (new Point(10 * 40, i * 40)));
  }
}

person Dinu    schedule 09.03.2010    source источник


Ответы (1)


Я предполагаю, что «получить сбои» на самом деле не означает, что ваш код дает сбой. Вам нужно будет компенсировать рисунок на величину прокрутки. Это легко сделать:

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
  // etc
  //...
}
person Hans Passant    schedule 09.03.2010
comment
Большое спасибо. Это мне очень помогло, так как я застрял там. :) - person Dinu; 10.03.2010