0

checkBoxの長方形の高さを大きくするカスタムを作成しましたcheckboxOnPaint 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 に答える