C# 如何在表单加载期间仅使用一次drawline功能?

C# 如何在表单加载期间仅使用一次drawline功能?,c#,C#,我正在使用drawline函数绘制水平线和垂直线来制作X-Y坐标图。其中的问题是每次我绘制其他形状(如矩形和椭圆)时背景图都会闪烁。每次我写一个新的形状对象时,drawline函数都会执行并重新加载,直到我停止绘制。如何解决这个问题?我只在这个背景图中使用drawline函数,在我的应用程序中不使用任何线型。我在formload中尝试过drawline,但它不能作为formload和绘制线不匹配。那么如何使该图保持不变(只调用一次) 以下是代码: private void draw(Gr

我正在使用drawline函数绘制水平线和垂直线来制作X-Y坐标图。其中的问题是每次我绘制其他形状(如矩形和椭圆)时背景图都会闪烁。每次我写一个新的形状对象时,drawline函数都会执行并重新加载,直到我停止绘制。如何解决这个问题?我只在这个背景图中使用drawline函数,在我的应用程序中不使用任何线型。我在formload中尝试过drawline,但它不能作为formload和绘制线不匹配。那么如何使该图保持不变(只调用一次)

以下是代码:

    private void draw(Graphics e, Point mold, Point mcur, int mshape, float mwidth, Color mcolor)
    {

        int numOfCells = 100;
        int cellSize = 25;

            for (int i = 0; i < numOfCells; i++)
            {
                Pen pn = new Pen(Color.LightSlateGray, ((mwidth - 1) / 25));
                // Vertical
                e.DrawLine(pn, i * cellSize, 0, i * cellSize, numOfCells * cellSize);
                // Horizontal
                e.DrawLine(pn, 0, i * cellSize, numOfCells * cellSize, i * cellSize);
            }

        Pen p = new Pen(mcolor, mwidth);
        switch (mshape)
        {
            case 0: e.DrawRectangle(p, rec(mold, mcur));
                      break;
            case 1: e.DrawEllipse(p, rec(mold, mcur));
                      break;
        }
    }        
    private Rectangle rec(Point P1, Point P2)
    {
        Rectangle a = new Rectangle(); 
        a.X = (P1.X > P2.X ? P2.X : P1.X);
        a.Y = (P1.Y > P2.Y ? P2.Y : P1.Y);
        a.Width = Math.Abs(P1.X - P2.X);
        a.Height = Math.Abs(P1.Y - P2.Y);
        return a;
    }  
private void draw(图形e、点模具、点mcur、int mshape、浮动宽度、颜色mcolor)
{
int numOfCells=100;
int cellSize=25;
对于(int i=0;iP2.X?P2.X:P1.X);
a、 Y=(P1.Y>P2.Y?P2.Y:P1.Y);
a、 宽度=数学绝对值(P1.X-P2.X);
a、 高度=数学绝对值(P1.Y-P2.Y);
返回a;
}  

您可以使用屏幕外缓冲或双缓冲

  • 创建一个内存对象
  • 在内存图形对象中执行绘图
  • 在内存中完成所有操作后,将整个内容转移到屏幕上
  • 阅读以下代码项目文章: