Пошаговое руководство. Наследование элементов управления Windows Forms с помощью Visual C#
С помощью Visual C# 2005 можно создавать эффективные настраиваемые элементы управления путем наследования. Наследование позволяет создавать элементы управления, сохраняющие все унаследованные функциональные возможности элементов управления Windows Forms и в то же время обладающие дополнительными функциями. В этом пошаговом руководстве вы создадите простой производный элемент управления с именем ValueButton. Эта кнопка наследует функциональные возможности стандартных форм Windows Button управления и предоставляет настраиваемое свойство ButtonValue.
Note
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров . Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки Visual Studio.
Создание проекта
Создавая проект, вы указываете для него имя, чтобы задать корневое пространство имен, имя сборки и имя проекта, и необходимо убедиться в том, что компонент по умолчанию попадет в нужное пространство имен.
Создание библиотеки элементов управления ValueButtonLib и элемента управления ValueButton
- В меню Файл наведите указатель мыши на пункт Создать и выберите Проект, чтобы открыть диалоговое окно Создание проекта. 
- Выберите Библиотека элементов управления Windows Forms шаблон проекта из списка проектов Visual C#, а также тип - ValueButtonLibв имя поле.- Имя проекта, - ValueButtonLib, по умолчанию также назначается корневому пространству имен. Корневое пространство имен используется для определения имен компонентов в сборке. Например, если в двух сборках содержатся компоненты с именем- ValueButton, можно указать компонент- ValueButton, используя- ValueButtonLib.ValueButton. Дополнительные сведения см. в разделе Пространства имен.
- В обозревателе решений щелкните правой кнопкой мыши UserControl1.cs и выберите в контекстном меню команду Переименовать. Измените имя файла на - ValueButton.cs. Чтобы переименовать все ссылки на элемент кода '- UserControl1', в соответствующем запросе нажмите кнопку Да.
- В обозревателе решений щелкните правой кнопкой мыши файл ValueButton.cs и выберите команду Просмотреть код. 
- Найдите - classстрока инструкции- public partial class ValueButtonи измените тип, из которого наследуется этот элемент управления из UserControl для Button. Это позволяет элементу управления унаследовать все функции из Button элемента управления.
- В обозревателе решений откройте узел ValueButton.cs, чтобы отобразить сформированный конструктором файл кода ValueButton.Designer.cs. Откройте этот файл в редакторе кода. 
- Найдите - InitializeComponentметод и удалить строку, назначающую AutoScaleMode свойство. Это свойство не существует в Button элемента управления.
- Сохраните проект, выбрав в меню Файл команду Сохранить все. - Note- Визуальный конструктор больше не доступен. Так как Button элемент управления имеет собственное оформление, вы не сможете изменить его внешний вид в конструкторе. Визуальное представление будет иметь точно так же, как он наследует от класса (то есть Button) Если изменения в код. В область конструктора по-прежнему можно добавлять компоненты, не имеющие элементов пользовательского интерфейса. 
Добавление свойства в наследуемый элемент управления
Один из возможных способов использования наследуемых элементов управления форм Windows Forms — это создание элементов управления, имеющих такой же внешний вид и функции, как у стандартных элементов управления Windows Forms, но предоставляющих настраиваемые свойства. В этом разделе вы добавите в элемент управления свойство с именем ButtonValue.
Добавьте значение свойства
- В обозревателе решений щелкните правой кнопкой мыши ValueButton.cs и выберите в контекстном меню пункт Просмотреть код. 
- Найдите оператор - 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.
- Сохраните проект, выбрав в меню Файл команду Сохранить все. 
Тестирование элемента управления
Элементы управления не являются автономными проектами и должны размещаться в контейнере. Чтобы протестировать элемент управления, необходимо предоставить тестовый проект, в котором он будет выполняться. Кроме того, нужно сделать элемент управления доступным для тестового проекта, выполнив сборку (компиляцию). В этом разделе вы выполните сборку элемента управления и протестируете его в Windows Forms.
Сборка элемента управления
- В меню Сборка выберите Собрать решение. - Сборка должна быть выполнена без ошибок компилятора и предупреждений. 
Создание тестового проекта
- В меню Файл наведите указатель мыши на пункт Добавить и выберите Проект, чтобы открыть диалоговое окно Добавление нового проекта. 
- Выберите узел Windows под узлом Visual C# и выберите приложение Windows Forms. 
- В поле Имя введите - Test.
- В обозревателе решений щелкните узел Ссылки для тестового проекта правой кнопкой мыши и выберите в контекстном меню пункт Добавить ссылку, чтобы открыть диалоговое окно Добавление ссылки. 
- Выберите вкладку Проекты. Проект - ValueButtonLibбудет указан под полем Имя проекта. Дважды щелкните проект, чтобы добавить ссылку на тестовый проект.
- В обозревателе решений щелкните Тест правой кнопкой мыши и выберите пункт Построить. 
Добавление элемента управления в форму
- В обозревателе решений щелкните правой кнопкой мыши файл Form1.cs и выберите в контекстном меню пункт Конструктор представлений. 
- На панели элементов выберите Компоненты ValueButtonLib. Дважды щелкните ValueButton. - Объект ValueButton появится в форме. 
- Щелкните ValueButton правой кнопкой мыши и выберите в контекстном меню пункт Свойства. 
- В окне Свойства проверьте свойства этого элемента управления. Обратите внимание, что они идентичны свойствам стандартной кнопки, кроме дополнительного свойства - ButtonValue.
- Задайте для свойства - ButtonValueзначение- 5.
- В все формы Windows Forms вкладке элементов, дважды щелкните метка добавление Label форму элемента управления. 
- Переместите метку в центр формы. 
- Дважды щелкните файл - valueButton1.- В редакторе кода откроется событие - valueButton1_Click.
- Вставьте следующую строку кода. - label1.Text = valueButton1.ButtonValue.ToString();
- В обозревателе решений щелкните Тест правой кнопкой мыши и выберите в контекстном меню команду Назначить автозагружаемым проектом. 
- В меню Отладка выберите пункт Начать отладку. - Form1отображается.
- Нажмите кнопку - valueButton1.- В - label1появится цифра 5, показывающая, что свойство- ButtonValueунаследованного элемента управления передано- label1с помощью метода- valueButton1_Click. Таким образом, ваш элемент управления- ValueButtonнаследует функциональные возможности стандартной кнопки Windows Forms и при этом предоставляет дополнительное настраиваемое свойство.