我寫利用下述(很簡單)控制在一個應用程序(註釋爲簡潔起見刪除):我在做什麼我的自定義「HorizontalRule」控件有問題?
public partial class HorizontalRule : Control
{
public HorizontalRule()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var g = e.Graphics;
var rect = new Rectangle(
this.ClientRectangle.Left,
this.ClientRectangle.Height/2 + 1,
this.ClientRectangle.Width,
1);
ControlPaint.DrawBorder3D(g, rect, Border3DStyle.Etched);
return;
}
}
免責聲明:我在畫我自己的控制是一個新手。
我選擇以這種方式繪製線條,基於recommendation in the Vista UX guidelines,這表明分隔符的高度爲1的蝕刻矩形。
當靜態時,這看起來很好,但我注意到,如果將此控件放置在窗口中並調整其大小(通過錨點,例如),我會重繪工件。我在我的整個客戶矩形的寬度上重繪我的邊框,但它就像沒有真正被繪製。在HorizontalRule的構造函數中啓用DoubleBuffered,或以其嵌入的形式啓用,似乎也沒有什麼區別。
我在做什麼錯?
更新:
%的建議,我打過電話base.OnPaint最後,而不是第一個。我不知道會發生什麼變化,也不會改變任何事情。
沒有畫出背景沒有用處。我仍然得到了僞像,但是我也沒有得到背景顏色,所以我看到了水平線下的任何圖像。
你是什麼意思?第一次顯示控件時,將邊框繪製到位圖上,然後在控件的寬度上拉伸該位圖? – 2009-04-16 17:21:52
這可以工作,我指的是緩存它。 – 2009-04-16 18:28:04