|
Глюк с Combobox если .ListCount = 0
|
|||
---|---|---|---|
#18+
Воспроизвести элементарно. Рисуем на форме пустой Combo1( в List ничего нет ). Строго под ним внизу рисуем еще чего нибудь, например другой Combobox (для чистоты эксперимента поместите его вплотную к верхнему). Рисуем еще чего-нибудь подальше , например кнопку. Действия: I.на верхнем Combobox нажать кнопку стрелка вниз (один раз). попытаться "зайти" в нижний Combobox. (во всяком случае щелкая по его верхней части ничего не выйдет, пока не нажать кнопку в верхнем Combo1 еще раз). II.на верхнем Combobox нажать кнопку стрелка вниз (один раз). нажать на кнопку. Нажмется, но только со второго раза. ======== Дальше веселее. Делаем форму WS_EX_LAYERED (у меня в проекте именно такая) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Действия: на верхнем Combobox нажать кнопку стрелка вниз (один раз). Появится "пустой" список. Но что интересно, его background всегда будет "прозрачным" - смотреть сквозь форму. И никакие WM_CTLCOLORLISTBOX не могут сделать его хотя бы "белым". ============================== Я выкрутился так: У меня Combo1 все равно сабкласится, при выводе встроенного Listbox имеем WM_CTLCOLORLISTBOX , где lparam -hwnd этого Listbox. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Т.е. грубо говоря, если список пустой, то его окно (невидимое? или глючное) делаем нулевых размеров. Тогда в любой другой контрол схотя бы со второго щелчка всегда попадаешь. Ну, а если потом добавили Combo1.ListCount то при след. нажатии на Combo1 список будет выводиться нормально =================================== Но может это как-то по другому фиксится? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2013, 18:08 |
|
Глюк с Combobox если .ListCount = 0
|
|||
---|---|---|---|
#18+
Можно как вариант при сабклассинге Combo1 игнорировать WM_COMMAND (при нажатии кнопки): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Но тогда при пустом Combo1 кнопка вообще нажиматься не будет (даже визуально). Красивше, когда она нажалась, но ничего не произошло (при этом все контролы доступны). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2013, 00:29 |
|
Глюк с Combobox если .ListCount = 0
|
|||
---|---|---|---|
#18+
Нормально делается так: 1. Сабклассим сам Combo1. 2. Ловим WM_CTLCOLORLISTBOX (при нажатии на кнопку Combobox). И если List пустой, то сабклассим ListBox, а зоодно запоминаем его hwndCombo1ListBox=lparam: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
3. Дальше надо отловить и отменить WM_PRINTCLIENT в Listbox и сразу сабклассинг Listbox-а снять. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 00:51 |
|
|
start [/forum/topic.php?fid=60&tid=2156927]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
19ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 358ms |
0 / 0 |