我创建了一个自定义的checkBox来增加checkbox的矩形的高度。我已经覆盖了下面给出的OnPaint method。当我使控件透明时,背景变成白色,而不是透明。可能的问题是什么?
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);
}发布于 2013-02-21 21:18:25
我不确定您的checkbox是从给定的类CheckBox派生的,还是从Control派生的。如果是从控件派生的,则应在构造函数中添加以下行:
public CustomChecBox()
: base()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}注意,还有一个名为OnPaintBackground(...)的函数您可以重写它,但您不需要这样做。在OnPaint()-function中,您应该替换
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设置为transparent,并且在构造器中添加了SetStyle-Methid,那么您的控件应该是真正透明的。我希望这能帮到你。
https://stackoverflow.com/questions/14994193
复制相似问题