调整winform大小后的绘画问题

时间:2014-06-06 18:57:49

标签: c# winforms visual-studio-2012 repaint

调整winform大小时我遇到了问题。我想为我的所有表单提供特定的背景颜色,所以我已经覆盖了OnPaintBackground方法,如下所示

protected override void OnPaintBackground(PaintEventArgs e)
    {
        DoubleBuffered = true;
        ResizeRedraw = true;

        using (var brush = new LinearGradientBrush(ClientRectangle, Color.LightBlue, Color.CornflowerBlue, 90F))
        {
           e.Graphics.FillRectangle(brush, ClientRectangle);
        }
    }

在表单上我还有一个包含文本框,标签等的GroupBox,其背景颜色设置为透明。当winform执行第一次工作正常,但是当我最小化winform然后最大化RED CROSS出现在groupbox内。

我已经审查了很多案例,但大多数都谈到了闪烁,但事实并非如此。我还看过这幅画是如何运作的,显然当winform首先显示时告诉孩子们控制自己画画,但由于父亲还没有画画,所以控件不知道画什么作为透明方面控件的背景。

以下是调整大小后的样子示例。

Resize showing RED CROSS

先谢谢您的帮助!

PS:我使用的是Visual Studio 2012,C#。

1 个答案:

答案 0 :(得分:-1)

我在这里找到了一篇文章:Calling OnPaintBackground

问题的答案是关于如何覆盖OnPaintBackground,为了确保它正常工作,他说你应该将表单样式设置为以下

this.SetStyle(ControlStyles.AllPaintingInWmPaint 
              | ControlStyles.OptimizedDoubleBuffer
              | ControlStyles.ResizeRedraw 
              | ControlStyles.DoubleBuffer 
              | ControlStyles.UserPaint
              , true);

.UserPaint只是告诉它你自己正在处理这幅画,以确保它没有被其他任何东西处理,以便正确地覆盖它。

希望这能帮到你!