如何覆盖UserControl类来绘制自定义边框?

时间:2010-10-11 17:08:29

标签: winforms custom-controls

我想覆盖System.Windows.Forms.UserControl来绘制自定义边框(例如使用自定义颜色)。使用内置类是不可能的,因为可以影响边界行为的唯一方法/属性是BorderStyle。

以下面的方式覆盖OnPaint(下面的代码)不是一个好的解决方案,因为它基本上是在原始的边框上绘制另一个边框。

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        if (this.BorderStyle == BorderStyle.FixedSingle)
            ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.LightGray, ButtonBorderStyle.Solid);
    }

有人知道如何在自定义控件中覆盖边框绘制吗?

出于某些原因,将此用户控件放入面板不是我的选择。

1 个答案:

答案 0 :(得分:5)

将base.BorderStyle设置为None,不绘制默认边框。您需要覆盖BorderStyle属性才能使其正常工作。

    public UserControl1() {
        InitializeComponent();
        base.BorderStyle = BorderStyle.None;
        this.BorderStyle = BorderStyle.FixedSingle;
    }

    private BorderStyle border;

    public new BorderStyle BorderStyle {
        get { return border; }
        set {
            border = value;
            Invalidate();
        }
    }