Пошаговое руководство. Наследование от элемента управления Windows Forms с помощью C#

С помощью C# можно создавать эффективные настраиваемые элементы управления путем наследования. Наследование позволяет создавать элементы управления, сохраняющие все унаследованные функциональные возможности элементов управления Windows Forms и в то же время обладающие дополнительными функциями. В этом пошаговом руководстве вы создадите простой производный элемент управления с именем ValueButton. Эта кнопка наследует функциональные возможности стандартного элемента управления ButtonValue Windows Forms и предоставляет настраиваемое свойство Button.

Создание проекта

Создавая проект, вы указываете для него имя, чтобы задать корневое пространство имен, имя сборки и имя проекта, и необходимо убедиться в том, что компонент по умолчанию попадет в нужное пространство имен.

Создание библиотеки элементов управления ValueButtonLib и элемента управления ValueButton

  1. В Visual Studio создайте новый проект библиотеки элементов управления Windows Forms и назначьте ему имя ValueButtonLib.

    Имя проекта, ValueButtonLib, по умолчанию также назначается корневому пространству имен. Корневое пространство имен используется для определения имен компонентов в сборке. Например, если в двух сборках содержатся компоненты с именем ValueButton, можно указать компонент ValueButton, используя ValueButtonLib.ValueButton. Дополнительные сведения см. в разделе Пространства имен.

  2. В обозревателе решений щелкните правой кнопкой мыши UserControl1.cs и выберите в контекстном меню команду Переименовать. Измените имя файла на ValueButton.cs. Чтобы переименовать все ссылки на элемент кода 'UserControl1', в соответствующем запросе нажмите кнопку Да.

  3. В обозревателе решений щелкните правой кнопкой мыши файл ValueButton.cs и выберите команду Просмотреть код.

  4. Найдите строку public partial class ValueButton инструкции class и измените тип, от которого наследует этот элемент управления, с UserControl на Button. Это позволит элементу управления унаследовать все функции элемента управления Button.

  5. В обозревателе решений откройте узел ValueButton.cs, чтобы отобразить сформированный конструктором файл кода ValueButton.Designer.cs. Откройте этот файл в редакторе кода.

  6. Найдите метод InitializeComponent и удалите строку, которая назначает свойство AutoScaleMode. Этого свойства не должно быть в элементе управления Button.

  7. Сохраните проект, выбрав в меню Файл команду Сохранить все.

    Примечание.

    Визуальный конструктор больше не доступен. Так как элемент управления Button рисуется самостоятельно, изменить его внешний вид в конструкторе нельзя. Если не вносить изменения в код, визуальное представление этого элемента управления будет таким же, как у класса, из которого он наследуется (т. е. Button). В область конструктора по-прежнему можно добавлять компоненты, не имеющие элементов пользовательского интерфейса.

Добавление свойства в наследуемый элемент управления

Один из возможных способов использования наследуемых элементов управления форм Windows Forms — это создание элементов управления, имеющих такой же внешний вид и функции, как у стандартных элементов управления Windows Forms, но предоставляющих настраиваемые свойства. В этом разделе вы добавите в элемент управления свойство с именем ButtonValue.

Добавьте значение свойства

  1. В обозревателе решений щелкните правой кнопкой мыши ValueButton.cs и выберите в контекстном меню пункт Просмотреть код.

  2. Найдите оператор class. Сразу после { введите следующий код.

    // Creates the private variable that will store the value of your
    // property.
    private int varValue;
    // Declares the property.
    public int ButtonValue
    {
       // Sets the method for retrieving the value of your property.
       get
       {
          return varValue;
       }
       // Sets the method for setting the value of your property.
       set
       {
          varValue = value;
       }
    }
    

    Этот код определяет методы хранения и извлечения свойства ButtonValue. Оператор get определяет значение, возвращаемое значению, которое хранится в закрытой переменной varValue, а оператор set задает значение закрытой переменной с помощью ключевого слова value.

  3. Сохраните проект, выбрав в меню Файл команду Сохранить все.

Тестирование элемента управления

Элементы управления не являются автономными проектами и должны размещаться в контейнере. Чтобы протестировать элемент управления, необходимо предоставить тестовый проект, в котором он будет выполняться. Кроме того, нужно сделать элемент управления доступным для тестового проекта, выполнив сборку (компиляцию). В этом разделе вы выполните сборку элемента управления и протестируете его в Windows Forms.

Сборка элемента управления

В меню Сборка выберите Построить решение. Сборка должна быть выполнена без ошибок компилятора и предупреждений.

Создание тестового проекта

  1. В меню Файл наведите указатель мыши на пункт Добавить и выберите Проект, чтобы открыть диалоговое окно Добавление нового проекта.

  2. Выберите узел Windows под узлом Visual C# и выберите приложение Windows Forms.

  3. В поле Имя введите Test.

  4. В обозревателе решений щелкните узел Ссылки для тестового проекта правой кнопкой мыши и выберите в контекстном меню пункт Добавить ссылку, чтобы открыть диалоговое окно Добавление ссылки.

  5. Выберите вкладку Проекты. Ваш проект ValueButtonLib будет указан в списке под заголовком Имя проекта. Дважды щелкните проект, чтобы добавить ссылку на тестовый проект.

  6. В обозревателе решений щелкните Тест правой кнопкой мыши и выберите пункт Построить.

Добавление элемента управления в форму

  1. В обозревателе решений щелкните правой кнопкой мыши файл Form1.cs и выберите в контекстном меню пункт Конструктор представлений.

  2. В панели элементов выберите Компоненты ValueButtonLib. Дважды щелкните ValueButton.

    Объект ValueButton появится в форме.

  3. Щелкните ValueButton правой кнопкой мыши и выберите в контекстном меню пункт Свойства.

  4. В окне Свойства проверьте свойства этого элемента управления. Обратите внимание, что они идентичны свойствам стандартной кнопки, кроме дополнительного свойства ButtonValue.

  5. Задайте для свойства ButtonValue значение 5.

  6. На вкладке Все формы Windows Formsпанели элементов дважды щелкните пункт Метка чтобы добавить в форму элемент управления Label.

  7. Переместите метку в центр формы.

  8. Дважды щелкните файл valueButton1.

    В редакторе кода откроется событие valueButton1_Click.

  9. Вставьте следующую строку кода.

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. В обозревателе решений щелкните Тест правой кнопкой мыши и выберите в контекстном меню команду Назначить автозагружаемым проектом.

  11. В меню Отладка выберите пункт Начать отладку.

    Появится Form1.

  12. Нажмите кнопку valueButton1.

    В label1 появится цифра 5, показывающая, что свойство ButtonValue унаследованного элемента управления передано label1 с помощью метода valueButton1_Click. Таким образом, ваш элемент управления ValueButton наследует функциональные возможности стандартной кнопки Windows Forms и при этом предоставляет дополнительное настраиваемое свойство.

См. также