|
Программирование >> Элементы языков с и с++
[падало сообщение Высший уровень опасности , при выборе желтой поло-сы- Средний уровень опасности и т. д. 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; ширина ) метод
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |