События WinForms для наследования элементов управления в стиле пользовательского интерфейса - PullRequest
1 голос
/ 26 февраля 2009

Ответьте на этот вопрос:

Советы по стилю и пользовательскому интерфейсу Winforms

Итак, я создал свои "базовые элементы управления", от которых наследуются другие элементы управления. Для тестирования я пытаюсь изменить один из шрифтов базовой метки. Но это не распространяется на элементы управления, которые наследуют от него. В одной из форм я вижу, что файл конструктора устанавливает свойства для элемента управления, поэтому свойства моего базового элемента управления переопределяются.

На базовом элементе управления я использую конструктор, чтобы установить свойства по умолчанию. Должен ли я использовать другое событие? Если да, то какой.

Вот код одного из базовых элементов управления на основе запроса комментария ...

Public Class InfoLabel
    Inherits Label

    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        Me.Font = New System.Drawing.Font("Tahoma", 14.25!)
        Me.ForeColor = System.Drawing.Color.FromArgb(CType(CType(49, Byte), Integer), CType(CType(97, Byte), Integer), CType(CType(156, Byte), Integer))
        Me.AutoSize = False

    End Sub
End Class

Базовые элементы управления отображаются на панели инструментов проектов в редакторе winform. Затем элементы управления перетаскиваются с панели инструментов.

1 Ответ

2 голосов
/ 27 февраля 2009

Ваша проблема в методе InitializeComponent () вашего пользовательского элемента управления. Я понятия не имею, почему это там. Вы бы получили этот метод автоматически, если бы вы реализовывали UserControl, но наследовать от стандартного элемента управления этот метод не должно быть там. Если у вашего базового класса есть метод InitializeComponent (), а у вашего подкласса также есть один, то кто-то перезаписывает кого-то другого.

Я только что создал подкласс в C #. Я перетащил это в свою форму, и шрифт отображался как новый шрифт, а не шрифт базового (Label) класса.

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyLabel : Label
    {
        public MyLabel()
        {
            Font = new Font("Candara", 14);
        }
    }
}

Затем я создал вторую метку под названием MySubLabel, унаследованную от класса MyLabel. Когда я изменил ForeColor в классе MyLabel, MySubLabel автоматически обновился.

Так что это должно работать.

Предупреждение: в Visual Studio необходимо перекомпилировать сборку, прежде чем пытаться увидеть обновления в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...