Ibland kan man sitta hur länge som helst och slita sig i håret över hur dåligt ens kod fungerar, när det i själva verket inte är ens eget fel. Jag har ett skumt fenomen som jag vill veta om någon, 1) känner till, och/eller 2) har lösning på. Klassisk problem. Det beror på att du inte stänger menyn. Eftersom du öppnar fönstret modalt i Click eventet. Lämnar koden inte Click eventet och frigör menyn. Hej. En annan lösning med flagga.. Vänta med att öppna form2 tills efter PopupMenu-kommandot. Det står så här i hjälpen: Tack för tipsen.VB5-bugg, popupmenu?
Enkel beskrivning:
Jag har två fönster, form1 och form2.
I form1 har jag en meny och två knappar. Menyn heter mnuMeny och har ett menyalternativ som heter mnuMenyalternativ, och som har en kod som öppnar form2 (form2.show 1).
Knapp1 öppnar menyn med popup-kommandot (popupmenu mnuMeny) och knapp2 länkar direkt till menyalternativet (mnuMenyalternativ_Click)
I form2 har jag en knapp och en meny. När man klickar på knappen ska menyn komma upp med popupmenu-kommandot.
Nu kommer det roliga.
* Om jag i form1 klickar på knapp2, som ju går menyalternativet, öppnas form2, och om jag där klickar på knappen så visas popupmenyn.
* Om jag i form1 klickar på knapp1, som ju först visar popupmenyn, och därefter klickar på menyalternativet, som öppnar form2, så öppnas form2. Men om jag där klickar på knappen så får jag inte upp popupmenyn.
---
Hur kan detta vara? Kan jag inte få fram en popupmeny i det nya fönstret för att det fönstret öppnades via en popupmeny? Hur jag än vrider och vänder på det så blir det på det här viset. jag har provat att gömma och disabla form1's popupmeny innan form2 öppnas, men det hjälper inte.
Det enda som hjälper är om jag öppnar form2 med form2.show 0 ... men jag vill inte att man ska kunna använda programmet bakom form2.
Eh? (tips, förslag, funderingar?)
*förvirrad*Sv: VB5-bugg, popupmenu?
Exempel för att återskapa felet:
<code>
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then
PopupMenu mnuPopUp, vbPopupMenuRightButton
End If
End Sub
Private Sub mnuPopUpNew_Click()
Dim frmForm As Form1
Set frmForm = New Form1
frmForm.Show vbModal
End Sub
</code>
Menyn kommer bara fungera på första formuläret.
Finns "enkla" två lösningar.
Använd flaggor. T.Ex:
<code>
Enum PopUpAction
paCanceled = 0
paNew = 1
End Enum
Private mPopUpAction
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then
mPopUpAction = paCanceled
PopupMenu mnuPopUp, vbPopupMenuRightButton
Select Case mPopUpAction
Case paNew
Dim frmForm As Form1
Set frmForm = New Form1
frmForm.Show vbModal
End Select
End If
End Sub
Private Sub mnuPopUpNew_Click()
mPopUpAction = paNew
End Sub
</code>
Vilket jag rekomenderar och tycker är snyggast.<br>
<br>
<br>
Eller så kan du använda en timer:
<code>
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbRightButton Then
PopupMenu mnuPopUp, vbPopupMenuRightButton
End If
End Sub
Private Sub mnuPopUpNew_Click()
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim frmForm As Form1
Timer1.Enabled = False
Set frmForm = New Form1
frmForm.Show vbModal
End Sub
</code>Sv: VB5-bugg, popupmenu?
Tack så mycket för förklaringen och lösningen. :)
*kan fortsätta i lugn och ro*Sv: VB5-bugg, popupmenu?
"When you display a pop-up menu, the code following the call to the PopupMenu method isn't executed until the user either chooses a command from the menu (in which case the code for that command's Click event is executed before the code following the PopupMenu statement) or cancels the menu. In addition, only one pop-up menu can be displayed at a time; therefore, calls to this method are ignored if a pop-up menu is already displayed or if a pull-down menu is open."
Så ex.vis (utifrån ditt exempel):
<code>
Dim wasClicked As Boolean
Private Sub Knapp1_Click()
PopupMenu mnuMeny
If ifClicked = True Then Form2.Show 1
End Sub
Private Sub mnuMenyAlternativ_Click()
wasClicked = True
End Sub
</code>
MVH/KovskySv: VB5-bugg, popupmenu?
Jag klurade runt lite och eftersom jag har en knapp i form1 som också öppnar dte nya fönstret, så kallar jag på den knappen från menyn, istället för att kalla på koden i menyn från knappen. Flummigt?
Förut hade jag själva koden i menyn, som popar up. Och jag hade en knapp som bara har koden mnuMenyalternativ_Click... men nu ändrade jag alltså och flyttade koden till knappen, och kallar på den från popupmenyn... och på så vis verkar menyn stängas och det nya fönstret kan ha en popupmeny. :)