Программирование >>  Элементы языков с и с++ 

1 ... 118 119 120 [ 121 ] 122 123 124 ... 200


[падало сообщение Высший уровень опасности , при выборе желтой поло-сы- Средний уровень опасности и т. д.

IСам компонент построим в программе, т. е. создадим его, а затем свойствам присвоим необходимые значения. Как строятся подобные списки? Все определяется значением свойства DrawMode (способ рисования элементов СэяЬоВох). Если значение этого свойства равно Normal, то в качестве объек-liOB рисования служат строки. Примеры работы с ними мы рассмотрели, [в этом случае среда сама добавляемые элементы переводит в текстовые строки.

I же значение DrawMode не равно Normal, то предполагается, что пользо-ль (т. е. вы) сам должен написать операторы построения объектов со Fbccmh их характеристиками (например, с цветом, шрифтом и т. п.). Причем операторы должны быть помещены в обработчики событий Drawitem (рисование элемента) и Measureitem (размеры элемента). Как это делается, пока-ино в листинге 11.8. Листинг содержит операторы обработчика кнопки sjtton2, помещенной в форму.

НГ11.8

tivate: System::Void button2 Click(System::Object sender, Sys-m:: EventArgs e)

Здесь создается и инициализируется компонент ComboBox. Свойство ipDownStyle установлено в значение DropDown. В этом случае, когда вы нете на стрелке в редактируемом поле компонента, раскроется список нента.

System::Windows::Forms::ComboBox comboBoxl; создание ComboBox

array<String > DangerLevels; создание массива уровней опасности

инициализация ComboBoxl

comboBoxl = gcnew ComboBox;

comboBoxl->DrawMode = System: :Windows: :Forms::DrawMode::OwnerDrawVariable;

comboBoxl->Location = System::Drawing::Point( 10, 20 );

coniboBoxl->Name = ComboBoxl ;



private: System::Void comboBoxl MeasureItem(System::Object sender. System: :Windows::Forms::MeasureItemEventArgs e)

Если вы установили значение свойства DrawMode в OwnerDrawVariable,

то должны обработать событие Measureltem. В его обработчике надо установить размеры элемента ComboBox: его высоту (height) и ширину (width) перед тем, как этот элемент будет прорисован

switch ( e->Index ) выдается индекс элемента, для которого вычисляются высота и ширина

coinboBoxl->Size = System::Drawing::Size( 200, 500 ); comboBoxl->DropDownWidth = 150; comboBoxl->DropDownHeight = 300; comboBoxl->TabIndex =0;

comboBoxl->DropDownStyle = ComboBoxStyle::DropDown;

DangerLevels = gcnew array<String>{ Высший уровень опасности , Средний уровень опасности , Низкий уровень опасности ); инициализация массива. comboBoxl->DataSource = DangerLevels;

источником данного компонента назначен массив

this->Controls->Add( comboBoxl ); добавляет к форме компонент ComboBoxl, который был искусственно создан в программе

Подключение обработчиков событий Measureltem и Drawltem:

comboBoxl->DrawItem +=

gcnew DrawltemEventHandler(this, SForml::comboBoxl DrawItem );

comboBoxl->MeasureItem +=

gcnew MeasureltemEventHandler( this, SForml::comboBoxl MeasureItem );

-----------------------------------------------------------------------



---------------------------------------

private: System::Void coinboBoxl DrawItem(System: :Object sender, Sys-tem::Windows: :Forms: :DrawltemEventArgs e)

Событие наступает, когда мы щелкаем на кнопке открытия списка.

I В этом обработчике идет прорисовка элементов ComboBox. Для случая нашего 11уимера надо нарисовать прямоугольники (они будут служить элементами спи-I ска) и закрасить их в разные цвета. Кроме того, надо будет задать характеристики шрифта для вывода наименований выбранных элементов

float size = 0;

System: : Drawing::Font myFont; FontFamily family = nullptr;

System::Drawing::Color DangerColor;

switch ( e->Index )

case 0:

size = 20;

DangerColor = System::Drawing::Color::Red; family = FontFamily::GenericSansSerif; break;

case 0:

e->IteinHeight = 40; высота для элемента с индексом О

break; case 1:

e->ItemHeight = 30;

break; case 2:

e->IteinHeight = 20;

break;

e->ItemWidth = 100; ширина ) метод



1 ... 118 119 120 [ 121 ] 122 123 124 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика