OnPaint油漆问题
本文关键字:问题 OnPaint | 更新日期: 2023-09-27 18:00:17
我创建了一个自定义的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);
}
我不确定您的复选框是从给定的类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,那么你的控件应该是真正透明的。我希望这能有所帮助。