Наследование форм. Построение нестандартных элементов на базе наследования.
Прежде всего следует сказать, что "визуальное наследование", часто упоминаемое в рекламных материалах по VB.NET, существует лишь в больном воображении специалистов по маркетингу. На самом деле речь идет о том, что формы, созданные в программе, могут использоваться как основа для определения новых форм посредством наследования. Конечно, это весьма удобно и полезно, но ничего принципиально нового в таком наследовании нет.
Класс формы, производный от Windows.Forms.Form и дополненный специализированными свойствами, методами и событиями, в дальнейшем может использоваться в качестве базового для определения новых классов. [История с "визуальным наследованием" как нельзя лучше демонстрирует тупость специалистов по рекламе. Возможно, эффектный термин поразит некомпетентного менеджера, но у программистов он лишь вызывает раздражение.]
Предположим, вы хотите создать для своей организации окно-заставку (splash screen), которое отдельные подразделения будут дополнять своими данными. Базовая форма создается следующим образом:
- Выполните команду File › New › Project.
- Выберите тип приложения Windows Application, введите в поле Name строку SplashScreeriBase и нажмите кнопку ОК.
Предположим, вы хотите преобразовать стандартное приложение Windows в библиотеку классов, чтобы откомпилировать его в DLL вместо ЕХЕ-файла. Проще всего это делается так:
- Щелкните правой кнопкой мыши в строке SplashScreenBase окна решения и выберите в контекстном меню команду Properties.
- Выберите в раскрывающемся списке Output Type строку Class Library (вместо Windows Application). Нажмите кнопку ОК.
- Сконструируйте форму, разместите на ней нужные элементы, реализуйте свойства, методы и события.
- Откомпилируйте программу.
После построения библиотеки DLL остается лишь включить ссылку на нее в решение, после чего классы DLL используются в программе наравне с остальными классами. При выполнении команды Project › Add Inherited Form можно поручить IDE включить в проект весь необходимый код, для чего достаточно ответить на несколько вопросов в диалоговых окнах. С другой стороны, возня с диалоговыми окнами выглядит немного глупо, поскольку после включения ссылки на DLL в проект остается лишь привести первую строку приложения к следующему виду:
Public Class Form1 Inherits SplashScreenBase. Form1
Все остальное за вас сделает механизм наследования! Этот способ особенно хорош тем, что работа дизайнера автоматически синхронизируется с унаследованной формой.
Построение нестандартных элементов на базе наследования
Наследование применяется при построении не только новых форм, но и новых элементов. Допустим, вы хотите создать текстовое поле, предназначенное для ввода только целых чисел. Как обычно, все начинается с объявления нового класса:
Public Class PositivelntegerTextBox Inherits System. Windows. Forms. TextBox
Остается лишь запрограммировать поле на нужное поведение. В оставшейся части этого раздела будет показано, как класс PositivelntegerTexBox наполняется специализированными свойствами, событиями и методами.
Примечание
Чтобы сократить объем этого примера, мы ограничимся упрощенной версией элемента. В частности, проблемы лицензирования и безопасности вообще не рассматриваются – за дополнительной информацией обращайтесь к более серьезным книгам, посвященным программированию элементов в .NET.
Итак, создайте новую библиотеку классов и включите в решение ссылку на сборку Windows.Forms.dll.
Примечание
Мы начинаем работу с библиотеки классов, а не с проекта типа User Control, потому что он лучше подходит для элементов, написанных "на пустом месте". Если вы захотите построить элемент, содержащий несколько других элементов, выберите в диалоговом окне New Project тип Windows Controls Library – в вашем распоряжении окажется контейнер, предназначенный для построения сложного элемента посредством включения.