表单OnPaint不清除以前的油漆

时间:2016-01-18 20:15:40

标签: c# winforms

我正在尝试覆盖Windows窗体的绘制事件,但是即使在我Invalidate()Update()表单之后,我对表单所做的所有绘画都会保留。

我正在使用计时器Invalidate()Update()表单,这会导致OnPaint()被调用

以下是代码:

// In the constructor the timer is created and enabled
private void UpdaterElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    WIDGET.Invalidate();
    WIDGET.Update();
}
private void WIDGET_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

    String text = DateTime.Now.ToString("hh:mm:ss tt");
    e.Graphics.DrawString(text, new Font("Arial", 32), Brushes.Black, new Point(0, 0));
}

2 个答案:

答案 0 :(得分:1)

它不应该清除表格(尽管通过覆盖你的窗口触发油漆事件应该完成工作)。如果您需要,请自行清除:

e.Graphics.Clear(/* insert your color here */);

答案 1 :(得分:1)

您必须使用某种颜色清除图形,这应该被认为是透明的,然后只需设置透明度键。

e.Graphics.Clear(Color.Purple);
this.TransparencyKey = Color.Purple;

result