|
Eigentlich ist das ein gar nicht unalltägliches Szenario: Sie öffnen über ein Kontext-Menü (Popup-Menü) ein Form als Dialog - modal, wie bei Dialogen üblich. Und in diesem Dialog wollen Sie den Anwender selbstverständlich auch wieder den in den Genuss von Kontext-Menüs kommen lassen. Nur: in dem modal geöffneten Dialog-Form wollen sich Popup-Menüs partout nicht öffnen lassen.
In Form1:
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Select Case Button
Case vbRightButton
PopupMenu mnuPop, vbPopupMenuRightButton
End Select
End Sub
Private Sub mnuForm2direct_Click()
Form2.Show vbModal
End Sub
Und in Form2:
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Select Case Button
Case vbRightButton
PopupMenu mnuPop, vbPopupMenuRightButton
End Select
End Sub
Private Sub mnuInfo_Click()
MsgBox "Popup-Menü von modalem Form!"
End Sub
Nichts rührt sich - der Aufruf des Popup-Menüs in Form2 wird einfach ohne jede Reaktion durchlaufen.
Die Lösung ist relativ einfach: Der Aufruf des ersten Popup-Menüs muss zuerst zurückkehren, ehe das modale Form angezeigt werden kann. Dazu legen Sie (hier: in Form1) eine Merk-Variable des Datentyps Boolean an, etwa mMenuForm2. Im Click-Ereignis des betreffenden Menü-Punktes geschieht nichts weiter, als dass diese Variable auf True gesetzt wird. Nach der Rückkehr des Popup-Menü-Aufrufs wird diese Variable geprüft. Ist sie True, der Menüpunkt wurde also ausgewählt, kann hier das modale Dialog-Form angezeigt werden. Sicherheitshalber sollte diese Variable vor dem Aufruf des Popup-Menüs auf False gesetzt werden, damit beim Erscheinen des Popup-Menüs deren Zustand klar definiert ist.
Private mMenuForm2 As Boolean
Private Sub mnuForm2indirect_Click()
mMenuForm2 = True
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Select Case Button
Case vbRightButton
mMenuForm2 = False
PopupMenu mnuPop, vbPopupMenuRightButton
If mMenuForm2 Then
Form2.Show vbModal
End If
End Select
End Sub
|