|
Иконка в трее + меню + Невидимая форма + SetForegroundWindow(Me.Handle) -глюки
|
|||
---|---|---|---|
#18+
Основная форма приложения - невидима (с самого начала). Реализовано так: В конструкторе: ShowInTaskBar=False, WindowState=Minimized Код: vbnet 1. 2. 3. 4.
(обсуждали как-то, этот трюк нормально работает) В трей выведена иконка: По науке, через NOTIFYICONDATA + Shell_NotifyIcon (.Net-овский прибамбас мне не достаточен) В качестве меню этой иконки используется контекстное меню menu_App (System.Windows.Forms.ContextMenu) Меню выводится при нажатии правой кнопки мыши на иконку трея таким образом: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
SetForegroundWindow(Me.Handle) нужна для того, чтобы меню закрывалось если пользователь щелкнул по рабочему столу, не выбрав ни одного пункта меню. Проблема возникает если 1) пользователь выбрал пункт меню, который не приводит к "переводу фокуса" на какое-либо другое (видимое) окно 2) потом сразу случайно нажал ENTER Также если пользователь 1) нажал ESC (меню закрылось) !!!но не ткнул по рабочему столу или другому окну 2) потом сразу нажал ENTER В этом случае главная форма (которая Me.Visible = False) почему-то становится видимой. Глюк неприятный, потому что форма чисто техническая. Виновата очевидно SetForegroundWindow(Me.Handle), уже проверил. Но без нее нельзя, меню не будет убираться, если ни один пункт не выбран. Я так понимаю, что после выбора пункта меню надо сразу снять действие SetForegroundWindow(Me.Handle). Как это сделать? SetForegroundWindow function (что-то наверно не догоняю) В моем распоряжении: Код: vbnet 1. 2.
Подозреваю, что если что-то дописывать, то именно туда, а не в обработку пунктов меню (оно всегда срабатывает при закрытии меню по любой причине). (P.S. в VB6 аналогичная последовательность действий форму видимой не делает, т.е. глюк не воспроизводится) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2015, 18:32 |
|
Иконка в трее + меню + Невидимая форма + SetForegroundWindow(Me.Handle) -глюки
|
|||
---|---|---|---|
#18+
При запуске из студии помогает: Код: vbnet 1. 2.
При запуске exe это не срабатывает, SetForegroundWindow возвращает false при попытке перевести стрелки на Desktop Странно, в .Net вроде "IDE" от "exe" не отличаются. Других идей пока нет. Пробовал еще Код: vbnet 1. 2. 3.
LockSetForegroundWindow всегда возвращает false , соответственно бесполезно Надо как-то снять Foreground с формы при выходе из меню ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2015, 19:51 |
|
Иконка в трее + меню + Невидимая форма + SetForegroundWindow(Me.Handle) -глюки
|
|||
---|---|---|---|
#18+
Воспроизвел проблему на простом примере: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
При нажатии на Button1 на Form1, и последующем нажатии на клавишу ENTER Form2 выводится на экран. При этом ее .Net -свойство .Visible остается равным False (проверял). Надо чтоб не выводилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2015, 21:43 |
|
Иконка в трее + меню + Невидимая форма + SetForegroundWindow(Me.Handle) -глюки
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Ну, по крайней мере оно заткнулось. Причина надо думать в идиотском высосанном из пальца "механизме", коим это окно скрывается при старте. Но .Net по другому не позволяет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2015, 22:34 |
|
|
start [/forum/topic.php?fid=20&fpage=85&tid=1401549]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
3ms |
others: | 10ms |
total: | 130ms |
0 / 0 |