![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Ммм... нужно мне сделать такой комбик, который: а) имеет мой бэкграунд (картинка и сверху текст, естесственно) и б) выпадающий список также появляется на определённом бэкграунде. Вот и весь вопрос - это мне через куда делать?
|
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
Нужно использовать режим OwnerDraw.
Добавлено @ 21:27 Поищи что-нибудь подобное тут: http://www.codeproject.com/cs/combobox/ |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
гм... повозился со всем этим делом - только вот одна проблема у меня - ownerdraw даёт мне рисовать ВНУТРИ комбика, но мне надо весь комбик перерисовывать. (то есть и рамочку вокруг него мне надо переделать). Вотъ...
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Кажется, нужно WM_NCPAINT обрабатывать. -------------------- ![]() |
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Ch0bits, это только догадка. А пример можешь на www.codeguru.com посмотреть, в разделе MFC
-------------------- ![]() |
|||
|
||||
Kefir |
|
||||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
На Paint неохота прорисовывать (не люблю я всякие рисовалки). Я сделал немного подругому (это я так - для тех кто может заинтересуется - вроде как howto). Возни, мне кажется меньше и к тому же всё проходит в дизайнере.
Значит постановка задачи: нужен ComboBox, у которого... 1) свой вид, т.е. на него можно матягивать картинки как на кнопки и менять их при нажатии/отжатии и т.д. (т.е. по эвентам). 2) у самого дроп-дауна должен быть свой вид (опять же некая картинка) + можно и нестандартную прокрутку сделать (например две кнопки - вверх и вниз). Итак по шагам. Я сделал следующее: 1. Создаём сам ComboBox - вместо обычного комбо ставим на форму CheckBox (ответ на вопрос "почему не кнопку?" можно найти в этой теме). 2. Устанавливаем Appearance нашего чекбокса в Button. 3. FlatAppearance по вкусу (если кнопка должна быть с мега картинкой без виндовского вида, то ставим FlatStyle = Flat и бякграунд имаже на нужную картинку). --- Теперь у нас есть нормальная не глючная "кнопка", которая на самом деле чек-бокс (но никто об этом не знает ;)) --- --- Приступим к дроп-дауну --- 4. Дроп-даун делается очень просто. Добавляем в проект ещё одну форму. 5. Добавляем ему какую-нить public переменную (для примера - public int choise). 6. Кидаем на эту форму нужные контролы, обозначающие "выборы" дроп-дауна (у меня это простые лэйблы). 7. Каждом них назначаем обработчик MouseClick в котором код примерно такой:
--- Теперь у нас есть замечательный дроп-даун в виде формы (а раз это форма, то возможности дизайна её просто безграничны!) --- --- Осталось только связать наш чек-бокс с этой формой --- 8. Добавляем чек-боксу эвент MouseClick и там пишем (код опять же подтачиваем под себя):
Итак, это я в общих чертах обрисовал как я сделал красивый комбик. Конечно, есть у него и нехорошие стороны - например, выбор нужен обязательно (т.е. пользователь обязан что-то выбрать), но от этого можно избавится прозрачной формой (а на клике у формы сидит закрытие диалога). Мне лично это не надо, поэтому я такого и не делал. Мне этот путь показался довольно простым в том смысле, что всё делается в дизайнере и довольно-таки просто. Без особых проблем реализуется и "динамический" дроп-даун, так что способ, имхо, удобный. |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Kefir, важная деталь: в обычном drop-down'е если юзер кликнул мышью вне открытого popup-а, то дропдовн закрывается. Например, раскрыв комбобокс и ткнув мышью вне формы (на рабочий стол, другое окно, таскбар и т.п.) - комбобокс сворачивается.
-------------------- ![]() |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
mr.DUDA, да, это я знаю. в моей проге это не критично - пусть выбирают язык! %) прога будет стоять на терминале с тач-скрином и без клавы. хотя можно конечно извратится и ставить размер формы на весь экран (+ форма, сессно, прозрачная) и по клике не на кнопки просто форму закрывать. хотя, конечно, это уже извращение. Если говорить о некоем "правильном" пути, то это создание своего комбика и обтёсывание его до нужной кондиции. Я же описал более простой, но менее "умный" способ как можно достаточно тупо симитировать поведение комбо с возможностью наложения дизайна.
|
|||
|
||||
Fomaa |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 27.6.2007 Репутация: нет Всего: нет |
а как же MicroSoft реализовал ComboBox? что он использует в качестве выпадающего списка?
|
|||
|
||||
shmarov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 15.6.2007 Где: 1001101 region Репутация: нет Всего: 1 |
поддерживаю предыдущий вопрос!
как сделать чтобы закрывался список при клике за его пределами? |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |