Главная » C#, Компоненты » Добавление закладки в редактор свойств

0

Стандартный редактор свойств нмеет две кнопки, переключающие его закладки. При нажатии на одну из ннх открывается список свойств компонента, а при нажатин на другую — список обработчиков событий. В этом разделе я хочу рассказать, как добавить свою кнопку и закладку в редактор свойств. Сама закладка редактора свойств описывается с помощью класса System.Windows. Forms. Design.PropertyTab. Для реализации своей закладки нужно перекрыть несколько свойств н методов (листинг 12.7):

?          метод bool CanExtend (object extendee) должен возвращать true, в случае, когда закладку нужно показывать. Параметр extendee представляет выбранный компонент, поэтому чаще всего реализация этого метода сводится к проверке типа этого параметра;

О метод PropertyDescriptorCollection GetProperties(object component. Attribute[] attributes) возвращает коллекцию дескрипторов свойств, которые будут показаны на закладке. В нашем случае я собираю все свойства, имеющие добавленный МНОЙ атрибут MyTabDisplayAttribute;

?    свойство string TabName возвращает имя закладки;

?    свойство Bitmap Bitmap возвращает картинку закладки.

О последнем свойстве стоит рассказать чуть подробнее. Картинку закладки можно загрузить из файла, как обычный файл изображения. Но такой способ не очень хорош, т. к. файл придется прикладывать к компоненту отдельно. Более удачный вариант— хранить картинку как ресурс. Для этого ее нужно ПОДКЛЮЧИТЬ К проекту И выставить СВОЙСТВО Build Action В значение Embedded Resource. Теперь файл будет прикреплен к компоненту. Загрузить его можно так:

new Bitmap(typeof(MyControl), "MyPropertyTab.bmp")

Кроме того, класс PropertyTab, по умолчанию, ищет в ресурсах файл, совпадающий с именем типа, плюс расширение, поэтому можно добавить в проект

такой файл, а само свойство вообще не перегружать. В нашем примере я на всякий случай преобразую размер картинки к нужному (а именно 16х ] 6):

new Bitmap(base.Bitmap, new Size(16, 16})

В коде самого компонента (листинг 12.8) свойствам, которые иужио вынести иа отдельную закладку, следует задать атрибут Browsabie(false), чтобы свойства не были видны на Стандартных закладках, И атрибут MyTabDisplay(true), чтобы свойство появилось на новой закладке. Вид новой закладки показан на рис. 12.2.

Листинг 12 7 Класс закладки для редактора свойств

using System,-

using System.Collections.Generic; using System.Text;

using System.Windows.Forms.Design; using System.ComponentModel; using System.Drawing;

namespace MyControl (

public class MyPropertyTab : PropertyTab

{

// Показывать закладку, если это TestComponent public override bool CanExtend(object extendee) (

return extendee is TestComponent;

}

// На новой закладке показываем свойства, // отмеченные атрибутом MyTabDisplayAttribute public override PropertyDescriptorCollection GetProperties( object component, Attribute[] attributes)

{

return TypeDescriptor.GetProperties( component, new Attributed ( new BrowsableAttribute (false}, new MyTabDisplayAttribute(true) }};

}

// Имя закладки

public override string TabName {

get

{

return "New Tab";

}

}

// Картинка. Берется из ресурсов. // Имя файла должно совпадать с // именем класса, т. е. MyPropertyTab.bmp

public override Bitmap Bitmap {

get

{

return new Bitmap(base.Bitmap, new Size(16, 16));

}

}

}

}

Листинг 12 8 Описание свойства, расположенного на новой закладке

using System;

using System,ComponentModel; using System.Windows.Forms;

namespace MyControl

{

[PropertyTab(typeof(MyPropertyTab), PropertyTabScope.Component)]

public class TestComponent : UserControl

{

private int test;

[Browsable(false)] [MyTabDisplayAttribute(true)]

public int Test {

get [ return test; } set { test = value; }

Рис. 12.2. Новая закладка в редакторе свойств

Литература:

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

По теме:

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