Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox, красивый... 
V
    Опции темы
Kefir
Дата 4.6.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



Ммм... нужно мне сделать такой комбик, который: а) имеет мой бэкграунд (картинка и сверху текст, естесственно) и б) выпадающий список также появляется на определённом бэкграунде. Вот и весь вопрос - это мне через куда делать?  
PM MAIL WWW Skype   Вверх
Ch0bits
Дата 4.6.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Нужно использовать режим OwnerDraw.

Добавлено @ 21:27 
Поищи что-нибудь подобное тут:
http://www.codeproject.com/cs/combobox/ 
PM WWW   Вверх
Kefir
Дата 5.6.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



гм... повозился со всем этим делом - только вот одна проблема у меня - ownerdraw даёт мне рисовать ВНУТРИ комбика, но мне надо весь комбик перерисовывать. (то есть и рамочку вокруг него мне надо переделать). Вотъ... 
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 5.6.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(Kefir @  5.6.2006,  09:56 Найти цитируемый пост)
гм... повозился со всем этим делом - только вот одна проблема у меня - ownerdraw даёт мне рисовать ВНУТРИ комбика, но мне надо весь комбик перерисовывать. (то есть и рамочку вокруг него мне надо переделать). Вотъ... 

Кажется, нужно WM_NCPAINT обрабатывать. 


--------------------
user posted image
PM MAIL WWW   Вверх
Ch0bits
Дата 6.6.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Цитата(mr.DUDA @  5.6.2006,  17:09 Найти цитируемый пост)
Кажется, нужно WM_NCPAINT обрабатывать. 

 smile  smile 
 
PM WWW   Вверх
mr.DUDA
Дата 14.6.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Ch0bits, это только догадка. А пример можешь на www.codeguru.com посмотреть, в разделе MFC 


--------------------
user posted image
PM MAIL WWW   Вверх
Kefir
Дата 15.6.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«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 в котором код примерно такой:
Код

this.choise = 1; //тут устанавливаем какой результат выбора
this.Close();

--- Теперь у нас есть замечательный дроп-даун в виде формы (а раз это форма, то возможности дизайна её просто безграничны!) ---
--- Осталось только связать наш чек-бокс с этой формой ---
8. Добавляем чек-боксу эвент MouseClick и там пишем (код опять же подтачиваем под себя):
Код

language_popup lang = new language_popup(); // тут мы создаём нашу дроп-даун форму
lang.Location = new Point(((CheckBox)sender).Location.X, ((CheckBox)sender).Location.Y + 100); // тут мы говорим в каком месте она должна показаться на экране (НБ! чтобы так делать надо у формы поставить StartPosition = Manual, иначе не сработает)
lang.ShowDialog(); // тут мы показываем "дроп-даун"
this.currentLanguage = lang.language; // иполучаем из формы результат выбора пользователя
lang.Dispose();


Итак, это я в общих чертах обрисовал как я сделал красивый комбик. Конечно, есть у него и нехорошие стороны - например, выбор нужен обязательно (т.е. пользователь обязан что-то выбрать), но от этого можно избавится прозрачной формой (а на клике у формы сидит закрытие диалога). Мне лично это не надо, поэтому я такого и не делал. Мне этот путь показался довольно простым в том смысле, что всё делается в дизайнере и довольно-таки просто. Без особых проблем реализуется и "динамический" дроп-даун, так что способ, имхо, удобный. 
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 15.6.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Kefir, важная деталь: в обычном drop-down'е если юзер кликнул мышью вне открытого popup-а, то дропдовн закрывается. Например, раскрыв комбобокс и ткнув мышью вне формы (на рабочий стол, другое окно, таскбар и т.п.) - комбобокс сворачивается. 


--------------------
user posted image
PM MAIL WWW   Вверх
Kefir
Дата 15.6.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



mr.DUDA, да, это я знаю. в моей проге это не критично - пусть выбирают язык! %) прога будет стоять на терминале с тач-скрином и без клавы. хотя можно конечно извратится и ставить размер формы на весь экран (+ форма, сессно, прозрачная) и по клике не на кнопки просто форму закрывать. хотя, конечно, это уже извращение. Если говорить о некоем "правильном" пути, то это создание своего комбика и обтёсывание его до нужной кондиции. Я же описал более простой, но менее "умный" способ как можно достаточно тупо симитировать поведение комбо с возможностью наложения дизайна. 
PM MAIL WWW Skype   Вверх
Fomaa
Дата 4.5.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 27.6.2007

Репутация: нет
Всего: нет



а как же MicroSoft реализовал ComboBox? что он использует в качестве выпадающего списка?
PM MAIL   Вверх
shmarov
Дата 11.6.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 15.6.2007
Где: 1001101 region

Репутация: нет
Всего: 1



поддерживаю предыдущий вопрос!
как сделать чтобы закрывался список при клике за его пределами?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1005 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.