【发布时间】:2011-11-18 15:07:59
【问题描述】:
我一直在学习如何使用 GDI,但很难理解 Invalidate() 和覆盖 onPaint 事件的工作原理,并且似乎在循环往复。
我有以下代码
private void DrawLine()
{
System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
formGraphics.DrawLine(myPen, mouseDown.X, mouseDown.Y, mouseUp.X, mouseUp.Y);
myPen.Dispose();
formGraphics.Dispose();
}
protected override void OnPaint(PaintEventArgs e)
{
DrawLine();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = e.Location;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
mouseUp = e.Location;
}
但是,我可以让我刚刚绘制的线条出现的唯一方法是手动调用 Invalidate(),当我这样做时,它会清除之前的所有线条。谁能告诉我这个问题在哪里?
【问题讨论】: