我不知道爲什麼會發生這種情況,但我創建了下面的代碼,這是一個漸變面板,面板然後停靠在屏幕的左側。漸變面板顯示紅色十字,當最小化,然後恢復
當窗體重新調整大小後,它會正確顯示,但是如果最小化窗體並將其恢復,則會得到一個大紅色的X而不是漸變。
任何人都可以發現錯誤?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
public class GradientPanel : Panel
{
private Color ColorA = Color.LightBlue;
private Color ColorB = Color.Red;
private LinearGradientMode GradientFillStyle = LinearGradientMode.ForwardDiagonal;
private Brush gradientBrush;
public Color colourStart
{
get { return ColorA; }
set { ColorA = value; Invalidate(); }
}
public Color colourEnd
{
get { return ColorB; }
set { ColorB = value; Invalidate(); }
}
public LinearGradientMode colourGradientStyle
{
get { return GradientFillStyle; }
set { GradientFillStyle = value; Invalidate(); }
}
public GradientPanel()
{
handlerGradientChanged = new EventHandler(GradientChanged);
ResizeRedraw = true;
}
private EventHandler handlerGradientChanged;
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
gradientBrush = new LinearGradientBrush(ClientRectangle, ColorA, ColorB, GradientFillStyle);
e.Graphics.FillRectangle(gradientBrush, ClientRectangle);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (gradientBrush != null) gradientBrush.Dispose();
}
base.Dispose(disposing);
}
protected override void OnResize(EventArgs eventargs)
{
Invalidate();
//base.OnResize(eventargs);
}
protected override void OnSizeChanged(EventArgs e)
{
Invalidate();
//base.OnSizeChanged(e);
}
private void GradientChanged(object sender, EventArgs e)
{
if (gradientBrush != null) gradientBrush.Dispose();
gradientBrush = null;
Invalidate();
}
}
我會避免在OnPaintBackground處理程序中創建一個新的LinearGradientBrush。我的猜測是你可能會碰到你的GDI對象限制(你可以在任務管理器中查看),因爲我認爲你沒有正確地放置你的畫筆。將它移到構造函數中,或者在顏色和樣式屬性更改時調用的函數中(並在創建新的函數之前處理前一個函數) – musefan 2012-02-21 12:13:32
@musefan感謝您的理解,我將其移至構造函數中,但現在忽略(而不是顯示黑色到紅色的水平漸變,它顯示了代碼中顯示的默認值)我如何解決這個問題,因爲我從來沒有回答過它之前 – Neo 2012-02-21 12:19:49
我發佈了一個答案來解釋它更多,我希望它適合你 – musefan 2012-02-21 12:28:17