Как переопределить класс UserControl для рисования пользовательской границы? - PullRequest
3 голосов
/ 11 октября 2010

Я хотел бы переопределить 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 Ответ

5 голосов
/ 11 октября 2010

Установите для 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();
        }
    }
...