在面板上绘画允许自动滚动

Din*_*inu 3 c# panel winforms

我正在实现一个想要在面板中绘制线条的应用程序.但是面板必须自动滚动,因为它的大小可以在运行时扩展.我使用的面板绘制方法如下所示.当我运行程序时它绘制线条,但当我向下滚动面板时,线条会崩溃.我怎么能避免这种情况?

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)));
  }
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 8

我会假设"崩溃"实际上并不意味着你的代码崩溃了.您需要通过滚动量来抵消绘图.这很容易做到:

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
  // etc
  //...
}
Run Code Online (Sandbox Code Playgroud)