2012-07-17 32 views
3

我正在使用自定义边框创建表单。 我想用onPaint覆盖绘制我自己的边框。 不幸的是,当我使用下面的代码时,我得到了图像的痕迹。OnPaint在调整大小时会留下痕迹

有谁知道如何解决这个问题? 是的,我已将DoubleBuffered设置为true。

protected override void OnPaint(PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    // Background 
    g.FillRectangle(new SolidBrush(ColorTranslator.FromHtml("#EFEFF7")), new Rectangle(0, 0, this.Width - 1, this.Height - 1)); 

    // Outer Borders 
    g.DrawImage(Resources.Resource.OuterBorderTopLeft, new Rectangle(0, 0, 13, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderTopLeft1, new Rectangle(13, 0, 221, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderTopLeft2, new Rectangle(0, 13, 13, 221)); 
    g.DrawImage(Resources.Resource.OuterBorderTopRight, new Rectangle(this.Size.Width - 13, 0, 13, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderTopRight1, new Rectangle(this.Size.Width - 13, 13, 13, 221)); 
    g.DrawImage(Resources.Resource.OuterBorderTopRight2, new Rectangle(this.Size.Width - 234, 0, 221, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomLeft, new Rectangle(0, this.Size.Height - 13, 13, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomLeft1, new Rectangle(0, this.Size.Height - 234, 13, 221)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomLeft2, new Rectangle(13, this.Size.Height - 13, 221, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomRight, new Rectangle(this.Size.Width - 13, this.Size.Height - 13, 13, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomRight1, new Rectangle(this.Size.Width - 234, this.Size.Height - 13, 221, 13)); 
    g.DrawImage(Resources.Resource.OuterBorderBottomRight2, new Rectangle(this.Size.Width - 13, this.Size.Height - 234, 13, 221)); 
    base.OnPaint(e); 
} 

回答

9

尝试重写调整大小的方法,太:

protected override void OnResize(EventArgs e) { 
    base.OnResize(e); 
    this.Invalidate(); 
} 

或在构造函数中,你可以添加其他设置:

public Form1() { 
    InitializeComponent(); 
    this.DoubleBuffered = true; 
    this.ResizeRedraw = true; 
} 
+3

+1第二, “更正确” 的答案;) – Tergiver 2012-07-17 23:38:25

+0

谢谢你的帮助提示! – 2012-07-18 05:11:56

+1

虽然可选,但我建议设置this.DoubleBuffered = true。否则,闪烁将是激烈的。 – RajV 2013-01-27 05:17:28

相关问题