2013-02-21 38 views
0

我創建了一個自定義checkBox來增加checkbox的矩形的高度。我已經覆蓋下面給出的OnPaint method。當我使控件透明時,背景變成白色,而不是透明。可能是什麼問題?OnPaint Paint Issue

protected override void OnPaint(PaintEventArgs pevent) 
    {   
     base.OnPaint(pevent);   
     int h = this.Height; 

     if (BackColor == Color.Transparent) 
     { 
      pevent.Graphics.Clear(this.Parent.BackColor);    
     } 
     else 
     { 
      pevent.Graphics.Clear(BackColor); 
     } 
     Rectangle rc = new Rectangle(new Point(0, 0), new Size(h, h)); 
     ControlPaint.DrawCheckBox(pevent.Graphics, rc, 
      this.Checked ? ButtonState.Checked : ButtonState.Normal); 

     SizeF stringMeasure = pevent.Graphics.MeasureString(Text, Font); 

     int topOffset = (int)(ClientRectangle.Height - stringMeasure.Height)/2; 

     pevent.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), this.Height, topOffset); 
    } 
+0

你是什麼意思「使控制透明」?我試圖設置背景顏色trasnparant,但一切工作正常。 – 2013-02-21 11:47:26

回答

0

我不確定您是否從給定類CheckBox派生了您的複選框,或者您是否從Control派生它。如果從控制得到的,你應該在構造函數中添加以下行:

public CustomChecBox() 
     : base() 
    { 
     SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
    } 

注意,這裏面還有一個叫OnPaintBackground(...),你可以重寫功能,但你不應該需要到這個。 在您的OnPaint() - 函數,你應該

pevent.Graphics.Clear(BackColor); 

pevent.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle); 

更換

if (BackColor == Color.Transparent) 
    { 
     pevent.Graphics.Clear(this.Parent.BackColor);    
    } 
    else 
    { 
     pevent.Graphics.Clear(BackColor); 
    } 

但是,這是在OnPaintBackground(...)會發生什麼。如果您將BackColor設置爲透明並且您在構造器中添加了SetStyle-Methid,那麼您的控件應該非常透明。我希望這有幫助。