如何在表单加载过程中只使用一次drawline功能
本文关键字:一次 功能 drawline 表单 加载 过程中 | 更新日期: 2023-09-27 17:58:33
我使用绘制线函数绘制水平线和垂直线,以制作X-Y坐标图。它的问题是每次我画其他形状,比如矩形和椭圆形时,背景图都会闪烁。每次我写一个新的形状对象绘制线函数时,都会执行并重新加载,所以闪烁效果一直持续到我停止绘制。如何解决这个问题?我只为这个背景图使用了drawline函数,在我的应用程序中没有使用任何线形。我已经尝试过在formload中绘制线,但它不能作为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;
}
您可以使用屏幕外缓冲或双缓冲。
- 创建内存对象
- 在内存图形对象中执行绘图
- 在内存中完成所有操作后,将整个内容转移到屏幕上
阅读以下代码项目文章:http://www.codeproject.com/Articles/12870/Don-t-Flicker-Double-Buffer