Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Всплывающие меню / 9 сообщений из 9, страница 1 из 1
23.02.2006, 19:14:32
    #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
24.02.2006, 11:27:12
    #33563510
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всплывающие меню
очень похоже, что вот этот код

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

Где этот код находится?
...
Рейтинг: 0 / 0
24.02.2006, 12:06:29
    #33563572
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всплывающие меню
Хотите работать с контекстным меню для MDI-Child формы?
Есть вариант это сделать не используя меню MDI-Parent формы.
...
Рейтинг: 0 / 0
27.02.2006, 12:02:23
    #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
27.02.2006, 12:12:47
    #33567432
vin_aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Всплывающие меню
WorobjoffХотите работать с контекстным меню для MDI-Child формы?
Есть вариант это сделать не используя меню MDI-Parent формы.

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

Объясните Ваше предложение.
...
Рейтинг: 0 / 0
27.02.2006, 14:23:58
    #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
27.02.2006, 15:48:55
    #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
28.02.2006, 11:38:37
    #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
28.02.2006, 11:40:14
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Всплывающие меню / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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