|
System.Windows.Forms.ToolBar + Tooltips = Глюки
|
|||
---|---|---|---|
#18+
Повелся я на Net - System.Windows.Forms.ToolBar чтоб ToolBar через API не рисовать (не путать со "стрипом"). С одной стороны у него есть одно хорошее свойство - TabIndex+Tabstop Т.е. юзер может прийти в Toolbar через Tab, стрелочками ходить между кнопками и Enter-ом кнопки нажимать. И есть большое подозрение что этот функционал с "фокусом" есть чисто .Net прибамбас, потому как ходить с клавиатуры по кнопочкам тулбара созданного через CreateWindowEx фиг получится. А с другой стороны это приводит к глюкам при использовании Tooltips на кнопках. 1) Когда ходишь по кнопкам с клавиатуры, тултипы появляются как если водить над кнопкой мышью. Не уверен что это вообще гуд. 2) Форма c Toolbar находится в фокусе -> Тыкаемся в рабочий стол -> Тыкаемся в шапку формы с Toolbar. Если Toolbar при этом в фокусе, всплывает примечание к первой кнопке 3) Просто ходим табом по элементам формы. Как только Toolbar получает фокус, всплывает примечание к первой кнопке. 4) Самое паршивое: примечание во всех этих 3-х случаях может всплывать не рядом с кнопкой а где попало, например в другом конце экрана далеко за пределами формы. Сталкивался кто? Как лечить? Воспроизвести просто: кинуть Toolbar на форму, добавить пару-тройку кнопок и задать для них свойство ToolTipText. Можно конечно попробовать делать примечания через TTN_GETDISPINFO (как всегда и делал), не используя ToolTipText но не уверен что это спасет. Подозреваю что .Net как то имитирует движение мыши над кнопкой ради реализации получения "фокуса" кнопками. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2015, 15:42 |
|
System.Windows.Forms.ToolBar + Tooltips = Глюки
|
|||
---|---|---|---|
#18+
Сколько не бился, не могу выловить ни TTN_GETDISPINFO ни TBN_GETINFOTIP, а без них свои ToolTip-ы не задашь. При этом TBN_HOTITEMCHANGE генерится исправно. Cюда глядел: http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ToolBar.cs,1674 Что-то они там мутят с тултипом. Хоть целиком через API Toolbar делать (как и было у меня). Но тогда "фокуса" не будет. А баг гнусный. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2015, 00:12 |
|
System.Windows.Forms.ToolBar + Tooltips = Глюки
|
|||
---|---|---|---|
#18+
Дмитрий772) Форма c Toolbar находится в фокусе -> Тыкаемся в рабочий стол -> Тыкаемся в шапку формы с Toolbar. Если Toolbar при этом в фокусе, всплывает примечание к первой кнопке 3) Просто ходим табом по элементам формы. Как только Toolbar получает фокус, всплывает примечание к первой кнопке.. Доперло. Надо чтоб он не делал Hover для первой кнопки при получении "фокуса". Код: vbnet 1. 2. 3.
Дмитрий774) Самое паршивое: примечание во всех этих 3-х случаях может всплывать не рядом с кнопкой а где попало, например в другом конце экрана далеко за пределами формы... При каких-то положениях формы (ближе к левому краю экрана) почему-то иногда всплывает в верхнем левом углу экрана а не рядом с кнопкой, если прийти на первую кнопку тулбара стрелками клавиатуры. Но с учетом исправления (2) и (3) уже не так паршиво и можно забить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2015, 05:05 |
|
System.Windows.Forms.ToolBar + Tooltips = Глюки
|
|||
---|---|---|---|
#18+
Дмитрий771) Когда ходишь по кнопкам с клавиатуры, тултипы появляются как если водить над кнопкой мышью. Не уверен что это вообще гуд. ... 4) Самое паршивое: примечание во всех этих 3-х случаях может всплывать не рядом с кнопкой а где попало, например в другом конце экрана далеко за пределами формы. Сделал. По TBN_HOTITEMCHANGE отслеживаем кнопку которая стала Hover, проверяем через TB_HITTEST находится ли мышь над этой кнопкой, и только если ДА, то выводим тултип, текст которого копируем из .Tag кнопки. Если нет, то устанавливаем .ToolTipText = "". Таким образом показываем тултипы только при движении мыши над кнопками. Проблема (4) автоматически уходит. TB_SETHOTITEM -1 при получении фокуса тулбаром можно не делать, но не помешает, т.к. это подсвечивание первой кнопки не по делу ни к чему. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2015, 15:35 |
|
|
start [/forum/topic.php?fid=20&msg=38884590&tid=1401886]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 126ms |
0 / 0 |