2012-12-06 103 views
1

我創建了我的表單背景的漸變,但我現在有這個問題。在winforms中,當我最小化,然後最大化形式我得到這個:Winforms最小化後最大化後的梯度誤差

imageshack.us/photo/my-images/35/errorbl.png

我想這個錯誤是表單必須在最大化之後重新繪製,而不是。有人知道如何解決它?

謝謝!

調用梯度:

public Base() 
    { 
     InitializeComponent(); 

     this.Paint += new PaintEventHandler(Form_Background); 

    } 

梯度方法:

public void Form_Background(object sender, PaintEventArgs e) 
    { 
     Color c1 = Color.FromArgb(255, 252, 254, 255); 
     Color c2 = Color.FromArgb(255, 247, 251, 253); 
     Color c3 = Color.FromArgb(255, 228, 239, 247); 
     Color c4 = Color.FromArgb(255, 217, 228, 238); 
     Color c5 = Color.FromArgb(255, 200, 212, 217); 
     Color c6 = Color.FromArgb(255, 177, 198, 215); 
     Color c7 = Color.FromArgb(255, 166, 186, 208); 

     LinearGradientBrush br = new LinearGradientBrush(this.ClientRectangle, c1, c7, 90, true); 
     ColorBlend cb = new ColorBlend(); 
     cb.Positions = new[] { 0, (float)0.146, (float)0.317, (float)0.439, (float)0.585, (float)0.797, 1 }; 
     cb.Colors = new[] { c1, c2, c3, c4, c5, c6, c7 }; 
     br.InterpolationColors = cb; 


     // paint 
     e.Graphics.FillRectangle(br, this.ClientRectangle); 
    } 
+0

這是相關的? http://stackoverflow.com/questions/9377337/gradient-panel-shows-red-cross-when-minimized-and-then-restored – keyboardP

+0

我們需要看看繪製漸變的代碼... –

+0

我更新了現在這個信息的帖子。 keyboardP,是的,它的相關,但我沒有得到他在做什麼解決方案。我也用過Colorblend .. – Andres

回答

3

它不工作的原因是認爲this.ClientRectangle寬度和高度被最小化後爲零。

需要施加任何梯度,並用它繪製前實現矩形的檢查:

Rectangle r = this.ClientRectangle; 

if (r.Width > 0 && r.Height > 0) { 

    //draw 

} 

所以,你的代碼想是這樣的:

public void Form_Background(object sender, PaintEventArgs e) { 

    Rectangle r = this.ClientRectangle; 

    if (r.Width > 0 && r.Height > 0) { 

     Color c1 = Color.FromArgb(252, 254, 255); 
     Color c2 = Color.FromArgb(247, 251, 253); 
     Color c3 = Color.FromArgb(228, 239, 247); 
     Color c4 = Color.FromArgb(217, 228, 238); 
     Color c5 = Color.FromArgb(200, 212, 217); 
     Color c6 = Color.FromArgb(177, 198, 215); 
     Color c7 = Color.FromArgb(166, 186, 208); 

     LinearGradientBrush br = new LinearGradientBrush(r, c1, c7, 90, true); 
     ColorBlend cb = new ColorBlend(); 
     cb.Positions = new[] { 0, (float)0.146, (float)0.317, _ 
            (float)0.439, (float)0.585, _ 
            (float)0.797, 1 }; 

     cb.Colors = new[] { c1, c2, c3, c4, c5, c6, c7 }; 
     br.InterpolationColors = cb; 

     // paint 
     e.Graphics.FillRectangle(br, r); 

     br.Dispose; //added dispose for the brush 

    } 
} 
+1

是的!那真是愚蠢!非常感謝你的回答!現在正在工作。 – Andres