我想覆盖 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);
    }

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

出于某些原因,在我的情况下,将此用户控件放入面板不是一个选项。

最佳答案

将 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();
        }
    }

关于winforms - 如何覆盖 UserControl 类以绘制自定义边框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3908384/

10-10 13:53