首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OnPaint画图问题

OnPaint画图问题
EN

Stack Overflow用户
提问于 2013-02-21 11:46:36
回答 1查看 978关注 0票数 0

我创建了一个自定义的checkBox来增加checkbox的矩形的高度。我已经覆盖了下面给出的OnPaint method。当我使控件透明时,背景变成白色,而不是透明。可能的问题是什么?

代码语言:javascript
复制
    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);
     }
EN

回答 1

Stack Overflow用户

发布于 2013-02-21 21:18:25

我不确定您的checkbox是从给定的类CheckBox派生的,还是从Control派生的。如果是从控件派生的,则应在构造函数中添加以下行:

代码语言:javascript
复制
public CustomChecBox()
        : base()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    }

注意,还有一个名为OnPaintBackground(...)的函数您可以重写它,但您不需要这样做。在OnPaint()-function中,您应该替换

代码语言:javascript
复制
if (BackColor == Color.Transparent)
    {
        pevent.Graphics.Clear(this.Parent.BackColor);            
    }
    else
    {
        pevent.Graphics.Clear(BackColor);
    }

使用

代码语言:javascript
复制
pevent.Graphics.Clear(BackColor);

代码语言:javascript
复制
pevent.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);

但这是,在OnPaintBackground(...)中发生的事情。如果您将BackColor设置为transparent,并且在构造器中添加了SetStyle-Methid,那么您的控件应该是真正透明的。我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14994193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档