0

我创建了一个自定义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);
     }
4

1 回答 1

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,那么您的控件应该是真正透明的。我希望这有帮助。

于 2013-02-21T13:18:25.407 回答