powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Всплывающие меню
9 сообщений из 9, страница 1 из 1
Всплывающие меню
    #33562996
vin_aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интерфейс - MDI. Из одной из форм вызывается контекстное меню MDI формы. Как изменить одно из полей на форме, чтобы не открылось еще одно дочернее окно (вызывается Form_Load). Код реакции следующий:

Private Sub mnuLabelChange_Click()
Dim strCaption As String
strCaption = "бла-бла"
<...>.lblFields(lblFieldPos) = strCaption ' вот тут затык - вызывает Load - новое окно
End Sub
Вместо <...> применялись: fForm1, Me.fForm1, fMainForm.fForm1

Private Sub mnuLabelChange_Click() находится в коде формы frmMain.
Окно дочерней формы определено в frmMain:
Dim fForm1 As New frmForm1
Set fForm1 = New frmForm1
Set fForm1.fMainForm = Me

а fMainForm - MDI форма, определенная в модуле:
Set fMainForm = New frmMain
fMainForm.Show

Реализация меню на форме fForm1 не предлагать, хотелось бы управлять существующей формой. Точнее, разобратся с механизмом обработки форм.
...
Рейтинг: 0 / 0
Всплывающие меню
    #33563510
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень похоже, что вот этот код

Код: plaintext
1.
2.
Dim fForm1 As New frmForm1
Set fForm1 = New frmForm1
Set fForm1.fMainForm = Me
отрабатывает каждый раз при нажатии контекстного меню.

Где этот код находится?
...
Рейтинг: 0 / 0
Всплывающие меню
    #33563572
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотите работать с контекстным меню для MDI-Child формы?
Есть вариант это сделать не используя меню MDI-Parent формы.
...
Рейтинг: 0 / 0
Всплывающие меню
    #33567374
vin_aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hibernateочень похоже, что вот этот код

Код: plaintext
1.
2.
Dim fForm1 As New frmForm1
Set fForm1 = New frmForm1
Set fForm1.fMainForm = Me
отрабатывает каждый раз при нажатии контекстного меню.

Где этот код находится?

Как указано выше, он находится в форме frmMain (MDI) и не обрабатывается (по трасировке не попадает туда). Такая реализация кода работает без проблем (не создается еще один экземпляр окна), если вызывающее окно не основное (в смысле не MDI).
Вообще как правильно ловить фокусы окон. Н-р, если созданы два одинаковых окна, как указано выше?
...
Рейтинг: 0 / 0
Всплывающие меню
    #33567432
vin_aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WorobjoffХотите работать с контекстным меню для MDI-Child формы?
Есть вариант это сделать не используя меню MDI-Parent формы.

Это как? Создавая в отдельной форме собственное меню? Во-первых, у меня при этом исчезает главное (MDI-формы) меню, что не есть гуд, поскольку нужно это меню, во-вторых, для каждого окна придется делать однотипные меню, что увеличивает код и запутывает.

Объясните Ваше предложение.
...
Рейтинг: 0 / 0
Всплывающие меню
    #33567949
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vin_aleksОбъясните Ваше предложение.
Вот как можно обойтись без WinAPI:
Создаем UserControl специально для этой MDI-Child формы.
На нем создаем меню.
Пишем Event
Код: plaintext
Public Event mnuClicked(byref m as Menu)
Пишем обработчики пунктов меню
Код: plaintext
1.
2.
Private sub mnuOpen_Click
   Raiseevent mnuClicked(mnuOpen)
End sub
Пишем процедуру "подъема" меню
Код: plaintext
1.
2.
Public Sub PopUpMenuFile
   Popubmenu mnuFile
End sub
Кладем UserControl на форму, и ставим ему Visible=False
Код: plaintext
1.
2.
Private sub Form_MouseUp(...
   UserControl1.PopUpMenuFile
End Sub
Пользуемся обработчиком его единственного события
...
Рейтинг: 0 / 0
Всплывающие меню
    #33568301
vin_aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WorobjoffПишем обработчики пунктов меню
Код: plaintext
1.
2.
Private sub mnuOpen_Click
   Raiseevent mnuClicked(mnuOpen)
End sub
Код: plaintext
1.
2.
Private sub Form_MouseUp(...
   UserControl1.PopUpMenuFile
End Sub
Пользуемся обработчиком его единственного события

А причем API к появлению еще одного окна формы (см. первый пост -> Load)? Где в приведенном мной коде ошибка? Будет ли Ваш обработчик изменять поле на форме или же откроет новое?
...
Рейтинг: 0 / 0
Всплывающие меню
    #33570139
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если отвечать на основной вопрос, то:
1. Событие Form_Load НЕ используем если хотим обращаться напрямую к контролоам на frmXXX. А саму форму держим постоянно подгруженной меняя только видимость ее. Т.е. обращение к ЛЮБОМУ контролу на форме вызывает событие Form_Load (если она еще не была загружена).
2. в MDIForm надо опеределить переменную так (примерно так):
Код: plaintext
1.
2.
Dim m_frmXXX as frmXXX
'Создание (где-то в MDIForm_Initialize или, в крайнем случае MDIForm_Load)
set m_frmXXX = new frmXXX
(вообще это - лишь рекомендация, т.к. вы привели слишком мало кода).
3. Если все же надо где-то выполнять код связанный с активизацией этой формы, тогда пишем процедуру типа Show_ME(параметры....) в frmXXX. И уже в этой процедуре управдяем видмостью ее.
4. Если надо использовать одинаковые пункты меню к любой форме которя активна в д.момент, пользуемся свойством ActveForm
5. Управлять состоянием контролов еще незагруженной формы можно но трудно:
1) Определяем публичные переменные (или свойства) в форме и в них храним все что касается контролов
2) В событии Form_Load эти переменные (свойства) копируем в свойства контролов.
...
Рейтинг: 0 / 0
Всплывающие меню
    #33570145
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
Dim m_frmXXX as frmXXX
'Создание (где-то в MDIForm_Initialize или, в крайнем случае MDIForm_Load)
set m_frmXXX = new frmXXX
Load m_frmXXX
m_frmXXX.Visible = false
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Всплывающие меню
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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