ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Совершенствование режима проектирования CarControl
Чтобы продемонстрировать использование некоторых из этих новых атрибутов, закройте проект CarControlTestForm и снова откройте проект CarControlLibrary. Давайте создадим пользовательскую категорию (назвав ее "Конфигурация машины"), в которой будут отображаться все свойства и события CarControl. Также укажем "дружественное" описание для каждого члена и значение по умолчанию для каждого свойства. Для этого просто обновите каждое из свойств и событий типа CarControl так, чтобы они поддерживали атрибуты [Category], [DefaultValue]
Теперь позвольте прокомментировать то, что означает присваивание свойству значения по умолчанию, поскольку, я уверен, это не то, что вы можете (естественно) предполагать. Упрощенно говоря, атрибут [DefaultValue] не гарантирует, что соответствующее значение элемента данных, представленного данным свойством будет автоматически установлено равным значению по умолчанию. Так, хотя вы и указали значение по умолчанию "Lemon" для свойства PetName, член-переменная carPetName не получит значения "Lemon", пока вы не установите это значение с помощью конструктора типа или синтаксиса инициализации члена (что вы уже на самом деле сделали).
Атрибут [DefaultValue] "вступает в игру" тогда, когда программист "переустанавливает" значение данного свойства в окне свойств. Чтобы переустановить свойство в Visual Studio 2005, выберите интересующее вас свойство, щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите Reset. Обратите внимание на то, что значение [Description] при этом появляется в нижней панели окна свойств (рис. 21.31).
Рис. 21.31. Переустановка свойства
Атрибут [Category] будет проявляться только тогда, когда программист выбирает для просмотра в окне свойств вид, сгруппированный по категориям (в противоположность просмотру по алфавиту, предлагаемому по умолчанию), рис. 21.32.
Рис. 21.32. Пользовательская категория
Определение выбираемых по умолчанию свойств и событий
Вдобавок к описаниям членов и группировке членов в категории вы можете настроить свои элементы управления на поддержку поведения, принятого по умолчанию. Так, для элемента управления можно назначить свойство, выбираемое по умолчанию. Для указания такого свойства используется
Тем самым вы гарантируете, что при выборе пользователем этого элемента управления в режиме проектирования в окне свойств автоматически будет выделено свойство Animate. Точно так же для элемента управления указывается выбираемое по умолчанию событие.
Тем самым вы гарантируете, что при двойном щелчке пользователя на этом элементе управления в режиме проектирования будет автоматически создан программный код заглушки для выбираемого по умолчанию события (теперь вам должно быть ясно, почему при двойном щелчке на Button автоматически обрабатывается событие Click, при двойном щелчке на Form – событие Load и т.д.).
Выбор изображений для панели инструментов
Наконец, непременным атрибутом любого "приличного" пользовательского элемента управления должно быть изображение, представляющее этот элемент управления в окне панели инструментов. В настоящий момент при выборе пользователем CarControl среда разработки покажет этот тип в панели инструментов со стандартной пиктограммой "зубчатки". Чтобы указать пользовательское изображение, первым шагом должно быть добавление в проект нового файла *.bmp (CarControl.bmp), размеры которого должны быть 16x16 пикселей (устанавливаются с помощью свойств Width и Height). Мы просто используем изображение Car из примера TreeView.
После создания подходящего изображения используйте атрибут [ToolboxBitmap] (который применяется на уровне типа), чтобы назначить это изображение своему элементу управления. Первым аргументом конструктора атрибута должна быть информация типа для элемента управления, а вторым аргументом – имя файла *.bmp без расширения.
Заключительным шагом является выбор значения Embedded Resource для свойства Build Action (с помощью окна свойств), чтобы данные соответствующего изображения были встроены в компоновочный блок (рис. 21.33).
Замечание. Причиной встраивания файла *.bmp вручную (в отличие от случая использования типа ImageList) является то, что вы не назначаете файл CarControl.bmp элементу пользовательского интерфейса в режиме проектирования, поэтому соответствующий файл *.resx не получает соответствующих обновленных данных.