Главная » C#, Компоненты » Описание и значок компонента

0

Теперь я сдержу обещание, которое давал в предыдущем разделе. Наш компонент должен уметь давать о себе больше информации.

Для добавления строкового описания для компонента мы добавим к классу атрибут Description:

(Description("Label с градиентной заливкой")] public partial class GradientLabel : Label

Добавить значок для компонента очень просто. Если два способа это сделать: картинка может храниться в отдельном файле или ее можно хранить внутри модуля компонента.

Ну, конечно, сначала ее нужно сделать. Значок должен иметь размер 16×16 пикселов, палитру 16 цветов и формат BMP или ICO. Для внешнего значка нужно добавить к классу атрибуты в виде:

[Toolboxltem(true) ]

[ToolboxBitmap {"с: WTestWGradientLabel. bmp") ] public partial class GradientLabel : Label

Первый атрибут говорит, что класс GradientLabel будет использоваться как элемент в стандартной панели инструментов Toolbox, а второй — где найти файл значка. Вообще говоря, первый атрибут выставлен в значение true по умолчанию, т. к. класс является наследником класса Label, но хорошей практикой является указать это напрямую.

Если же значок хранится внутри модуля (что мне кажется более естественным и удобным), то соответствующий файл нужно добавить к проекту (меню Project | Add Existing Item). В свойствах файла параметр Build Action нужно уставить в значение Embedded Resource (рис. 5.8). Теперь добавим атрибуты, указывающие, как найти значок: [Toolboxltem(true) ]

[ToolboxBitmap (typeof (GradientLabel) ) ] public partial class GradientLabel : Label

Рис. 5.8. Файл картинки должен иметь свойство Build Action равным Embedded Resource

По умолчанию берется имя файла, совпадающее с именем типа, плюс расширение bmp. Если по какой-то причине нужно указать другое имя файла, то следует использовать второй конструктор атрибута с двумя аргументами:

[Toolboxlt em(t rue)]

[ToolboxBitmap(typeof (GradientLabel! , "Label.brap" ) ] public partial class GradientLabel : Label

He знаю почему, но для компонентов текущего проекта ни значок, ни описание не появляются. Может быть, это ошибка в редакторе Visual Studio, а может быть, так и нужно. В любом случае с появлением значка и описания придется подождать, пока мы не научимся устанавливать наш компонент самостоятельно (см. разд. 5.8).

Кстати, есть и другой способ установки значка. Так как по умолчанию атрибут ToolboxBitmap берет файл согласно имени типа, то Visual Studio автоматически загружает значок, если находит такой файл в папке проекта. Конечно, такой способ наиболее простой, но мне кажется, более правильно хранить значок как внутренний ресурс, т. к. иначе значок не будет являться частью сборки, и придется решать вопрос доступности этого файла при распространении компонента.

Хотя установка значка процедура достаточно простая, часто она вызывает проблему. Значок просто не появляется, и понять, почему так происходит и в чем дело, довольно сложно. Наиболее частая причина проблемы — несовпадение реального и ожидаемого имени файла (ресурса). Для начала проверьте, что параметр Default Namespace в параметрах проекта соответствует реальному имени пространства имен проекта. Если это не помогает, можно угнать, какие имена ресурсов присутствуют в сборке, вставив в код такие строки:

string [} names =

Assembly .Ge-cAssembly (this . GetType () ) . GetManifestResourceNdmea () : foreach (string name m names) MessageBox.Show(name);

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

Еще одно замечание касается атрибута Tooiboxitem. При необходимости решить обратную задачу, т. е. сделать так, чтобы компонент не показывался в палитре компонентов, достаточно задать два атрибута:

[DesignTimeVisible(false), Tooiboxitem(false)] public class TestComponent : Component

}

Атрибут DesignTimevisibie с параметром false указывает, что компонент не будет виден в режиме разработки, а атрибут Tooiboxitem с параметром false — что компонент не будет появляться в пал игре коммоненюв.

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии