powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / popupmenu(в Form1) -> FormModal.Show Modal ->popupmenu(FormModal) -не работает
3 сообщений из 3, страница 1 из 1
popupmenu(в Form1) -> FormModal.Show Modal ->popupmenu(FormModal) -не работает
    #38275522
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалось слава богу смоделировать проблему. Чистый VB6 на 3 строчки кода.

Выводим модальную FormModal тремя вариантами:

Вариант 1.
В Form1 есть меню с пунктом Show Modal c кодом:
Код: vbnet
1.
2.
3.
Private Sub menu_File1ShowModal_Click()
  FormModal.Show 1
End Sub


Вариант 2.
Также есть кнопка CommandShowModal, кот. делает тоже самое
Код: vbnet
1.
2.
3.
Private Sub CommandShowModal_Click()
  menu_File1ShowModal_Click
End Sub


Вариант 3.
Также menu_File1 можно вызвать через popup, а потом соотв. нажать там "Show Modal"
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    PopupMenu menu_File1
  End If
End Sub



Теперь внимание. В FormModal также есть свое menu_File2 вызываемое через popup
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'в модальной форме
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = vbRightButton Then
    Debug.Print "Нажали правую кнопку мыши на FormModal"
    PopupMenu Me.menu_File2
  End If
End Sub



Так вот, если модальная форма вызывалась по сценарию Вариант 1. или Вариант 2. , то нижний код выводит меню при щелчке по форме правой кнопкой мыши.

А если по сценарию Вариант 3. , т.е.
popup по первой форме
popup по второй форме
то МЕНЮ НА ВТОРОЙ ФОРМЕ НЕ ПОЯВЛЯЕТСЯ .

P.S. Монитор тряпочкой протирал, стучать не пробовал
PPS. В реальном приложении popup меню формы 1 - это меню трея, где есть пункт "Settings", кот. вызывает форму "Settings" (логично что она модальная), а в форме "Settings" есть всякие Listview c контекстными меню. Дык вот при вызове из трея ни одно из этих контекстных меню не показывается.
Но как выяснилось проблема высекается на раз-два. Вот только как решить? "Тест проект" прилагается.
...
Рейтинг: 0 / 0
popupmenu(в Form1) -> FormModal.Show Modal ->popupmenu(FormModal) -не работает
    #38275534
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый пришедший в голову workaround:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub menu_File1ShowModal_Click()
  'Timer1.Interval = 1 '(1 миллисекунда)
  Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
  Timer1.Enabled = False
  FormModal.Show 1
End Sub

Тогда работает.

Как вариант, но как-то это фигово выглядит.
...
Рейтинг: 0 / 0
popupmenu(в Form1) -> FormModal.Show Modal ->popupmenu(FormModal) -не работает
    #38275578
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по другому как через таймер и не получится.
Popup может быть только один.
Вызывая модальное окно из кода первого popup меню, я блокирую дальнейшее выполнение вызывающей функции (пока Modal не закроется) и закрытие хэндла первого popup(опять же пока Modal не закроется).
Соответственно второе popup (из модальной формы) вызвать невозможно.

Deadlock.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / popupmenu(в Form1) -> FormModal.Show Modal ->popupmenu(FormModal) -не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]