Иллюстрированный самоучитель по Visual Basic .NET

Наследование форм. Построение нестандартных элементов на базе наследования.

Прежде всего следует сказать, что "визуальное наследование", часто упоминаемое в рекламных материалах по VB.NET, существует лишь в больном воображении специалистов по маркетингу. На самом деле речь идет о том, что формы, созданные в программе, могут использоваться как основа для определения новых форм посредством наследования. Конечно, это весьма удобно и полезно, но ничего принципиально нового в таком наследовании нет.

Класс формы, производный от Windows.Forms.Form и дополненный специализированными свойствами, методами и событиями, в дальнейшем может использоваться в качестве базового для определения новых классов. [История с "визуальным наследованием" как нельзя лучше демонстрирует тупость специалистов по рекламе. Возможно, эффектный термин поразит некомпетентного менеджера, но у программистов он лишь вызывает раздражение.]

Предположим, вы хотите создать для своей организации окно-заставку (splash screen), которое отдельные подразделения будут дополнять своими данными. Базовая форма создается следующим образом:

  1. Выполните команду File › New › Project.
  2. Выберите тип приложения Windows Application, введите в поле Name строку SplashScreeriBase и нажмите кнопку ОК.

Предположим, вы хотите преобразовать стандартное приложение Windows в библиотеку классов, чтобы откомпилировать его в DLL вместо ЕХЕ-файла. Проще всего это делается так:

  1. Щелкните правой кнопкой мыши в строке SplashScreenBase окна решения и выберите в контекстном меню команду Properties.
  2. Выберите в раскрывающемся списке Output Type строку Class Library (вместо Windows Application). Нажмите кнопку ОК.
  3. Сконструируйте форму, разместите на ней нужные элементы, реализуйте свойства, методы и события.
  4. Откомпилируйте программу.

После построения библиотеки 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 – в вашем распоряжении окажется контейнер, предназначенный для построения сложного элемента посредством включения
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.