2013-02-21 2 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, но все работает нормально. –

ответ

0

Я не уверен, что вы получили свой флажок из данного класса CheckBox или вы получили его из Control. Если полученный из-под контроля, вы должны добавить в конструктор следующую строку:

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

Обратите внимание, что есть также функция, называемая OnPaintBackground (...), которые вы можете изменить, но вам не нужно, чтобы это. В вашей OnPaint() - функция, вы должны заменить

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

с

pevent.Graphics.Clear(BackColor); 

или

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

Но это то, что происходит в OnPaintBackground (...). Если вы установите BackColor на прозрачный, и вы добавили SetStyle-Methid в contructor, тогда ваш контроль должен быть действительно прозрачным. Надеюсь, это поможет.