Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > ComboBox |
Автор: Kefir 4.6.2006, 20:25 |
Ммм... нужно мне сделать такой комбик, который: а) имеет мой бэкграунд (картинка и сверху текст, естесственно) и б) выпадающий список также появляется на определённом бэкграунде. Вот и весь вопрос - это мне через куда делать? |
Автор: Ch0bits 4.6.2006, 21:26 |
Нужно использовать режим OwnerDraw. Добавлено @ 21:27 Поищи что-нибудь подобное тут: http://www.codeproject.com/cs/combobox/ |
Автор: Kefir 5.6.2006, 10:56 |
гм... повозился со всем этим делом - только вот одна проблема у меня - ownerdraw даёт мне рисовать ВНУТРИ комбика, но мне надо весь комбик перерисовывать. (то есть и рамочку вокруг него мне надо переделать). Вотъ... |
Автор: Ch0bits 6.6.2006, 20:19 |
![]() ![]() |
Автор: mr.DUDA 14.6.2006, 10:45 |
Ch0bits, это только догадка. А пример можешь на www.codeguru.com посмотреть, в разделе MFC |
Автор: Kefir 15.6.2006, 09:42 | ||||
На Paint неохота прорисовывать (не люблю я всякие рисовалки). Я сделал немного подругому (это я так - для тех кто может заинтересуется - вроде как howto). Возни, мне кажется меньше и к тому же всё проходит в дизайнере. Значит постановка задачи: нужен ComboBox, у которого... 1) свой вид, т.е. на него можно матягивать картинки как на кнопки и менять их при нажатии/отжатии и т.д. (т.е. по эвентам). 2) у самого дроп-дауна должен быть свой вид (опять же некая картинка) + можно и нестандартную прокрутку сделать (например две кнопки - вверх и вниз). Итак по шагам. Я сделал следующее: 1. Создаём сам ComboBox - вместо обычного комбо ставим на форму CheckBox (ответ на вопрос "почему не кнопку?" можно найти в http://forum.vingrad.ru/index.php?showtopic=99908 теме). 2. Устанавливаем Appearance нашего чекбокса в Button. 3. FlatAppearance по вкусу (если кнопка должна быть с мега картинкой без виндовского вида, то ставим FlatStyle = Flat и бякграунд имаже на нужную картинку). --- Теперь у нас есть нормальная не глючная "кнопка", которая на самом деле чек-бокс (но никто об этом не знает ;)) --- --- Приступим к дроп-дауну --- 4. Дроп-даун делается очень просто. Добавляем в проект ещё одну форму. 5. Добавляем ему какую-нить public переменную (для примера - public int choise). 6. Кидаем на эту форму нужные контролы, обозначающие "выборы" дроп-дауна (у меня это простые лэйблы). 7. Каждом них назначаем обработчик MouseClick в котором код примерно такой:
--- Теперь у нас есть замечательный дроп-даун в виде формы (а раз это форма, то возможности дизайна её просто безграничны!) --- --- Осталось только связать наш чек-бокс с этой формой --- 8. Добавляем чек-боксу эвент MouseClick и там пишем (код опять же подтачиваем под себя):
Итак, это я в общих чертах обрисовал как я сделал красивый комбик. Конечно, есть у него и нехорошие стороны - например, выбор нужен обязательно (т.е. пользователь обязан что-то выбрать), но от этого можно избавится прозрачной формой (а на клике у формы сидит закрытие диалога). Мне лично это не надо, поэтому я такого и не делал. Мне этот путь показался довольно простым в том смысле, что всё делается в дизайнере и довольно-таки просто. Без особых проблем реализуется и "динамический" дроп-даун, так что способ, имхо, удобный. |
Автор: mr.DUDA 15.6.2006, 10:38 |
Kefir, важная деталь: в обычном drop-down'е если юзер кликнул мышью вне открытого popup-а, то дропдовн закрывается. Например, раскрыв комбобокс и ткнув мышью вне формы (на рабочий стол, другое окно, таскбар и т.п.) - комбобокс сворачивается. |
Автор: Kefir 15.6.2006, 13:10 |
mr.DUDA, да, это я знаю. в моей проге это не критично - пусть выбирают язык! %) прога будет стоять на терминале с тач-скрином и без клавы. хотя можно конечно извратится и ставить размер формы на весь экран (+ форма, сессно, прозрачная) и по клике не на кнопки просто форму закрывать. хотя, конечно, это уже извращение. Если говорить о некоем "правильном" пути, то это создание своего комбика и обтёсывание его до нужной кондиции. Я же описал более простой, но менее "умный" способ как можно достаточно тупо симитировать поведение комбо с возможностью наложения дизайна. |
Автор: Fomaa 4.5.2009, 17:24 |
а как же MicroSoft реализовал ComboBox? что он использует в качестве выпадающего списка? |
Автор: shmarov 11.6.2009, 14:40 |
поддерживаю предыдущий вопрос! как сделать чтобы закрывался список при клике за его пределами? |