Bug des menus contextuels sous VB6

Signaler
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
-
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
-
Bonjour<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


Si j'appelle un formulaire à partir d'un menu contextuel, les menus contextuels du nouveau formulaire n'apparaissent plus. Comment éviter ce bug.


Exemple
Dans mon Form1
J'ai un menu qui s'appelle "MonMenu" avec un sous menu qui s'appelle GO et qui exécute le code pour ouvrir le form2

Private Sub Command1_Click()
PopupMenu MonMenu ‘Ouvrir le menu popup
End Sub


Private Sub SousSousMenu_Go_Click()
Form2.Show vbModal ‘ Ouvrir le formulaire 2
End Sub

Dans mon Form2
J'ai un menu qui s'appelle menu avec un sous élément et un bouton

Private Sub Command1_Click()
PopupMenu Menu
End Sub

Lorsque je clique sur Command1_click, ça ne marche pas. Par contre si j'appelle mon formulaire 2 directement par un bouton sans passer par un menu contextuel ce fonctionne

Comment corriger ce problème SVP

10 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Salut,

Pour que ça marche, il ne faut pas que tu ouvres form2 en modal.

Loup Gris
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010

C'est impossible dans mon cas. J'ai modifié mon code pour qu'il declanche
un Timer qui se coupe immédiatement et qui lance le Form2 en modal.
Ca marche, mais c'est pas tres propre.

Véritable bug du VB ?
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Bug ? je ne pense pas. Après tout, un form ouvert en modal c'est un peu comme une msgbox. Ca stoppe le prog tant qu'on n'a pas donné une des réponses attendues

Je ne sais pas ce que tu veux faire exactement mais il doit y avoir un autre moyen. Décris mieux ton prob, si possible avec un bout de code (pas trop long).

Loup Gris
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010

Vous n'avez pas bien compris mon probleme. Ce n'est pas les menus contextuels du Form1 qui me posent des problemes, il est normal qu'ils soient bloqués, mais ceux du Form2 qui n'ont aucune raison d'etre bloqués.


Mon probleme est simple. Quand j'appele un formulaire a partir d'un menu contextuel. Tous les menus contextuels de ce formulaire (celui qui à été appellé : Form2) ne fonctionnent plus. Si je l'appelle à partir d'un simple bouton ca fonctionne. Donc c'est bien un bug, car ce probleme ne se produit pas d'en d'autres applications Windows.

Il est normal que les menus contextuels du form1 soit bloqués (comme tous les controles) puisque le Form2 est en modal, mais pas que les menus contextuels du Form2 soit bloqués.

Si on appele le Form2 par un menu NORMAL du Form1, les menus du Form2 fonctionnent toujours. Alors pourquoi lorsqu'on appelle le Form2 par un menu contextuel, les menus contextuels du Form2 n'apparaissent plus : Ce n'est pas normal c'est bien un bug du VB6


D'ailleurs si on utilise mon astuce (mettre un Timer dans le menu contextuel du Form1 pour appeler le Form2 en VBMODAL) ca fonctionne, mais ca n'est pas tres propre.
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Je ne pense avoir mal compris et je maintiens que ce n'est pas un bug mais une propriété du popupmenu. Mais je me suis sans doute mal exprimé.

Extrait de l'aide de vb6 pour le popupmenu :

"...plusieurs menus contextuels ne peuvent être affichés simultanément. De ce fait, les appels de cette méthode ne sont pas pris en compte si un menu contextuel est déjà affiché ou si un menu déroulant est ouvert...."

Quand tu ouvres un form en modal, c'est comme si tu affichais une msgbox.
La procédure click dans ton menu ou sousmenu ne se termine que lorsque tu refermes le form modal. Fais l'expérience de mettre, par ex, msgbox "test" après ton form2.show vbmodal et tu verras que cette instruction n'est exécutée qu'après fermeture du form.
Donc le menu de départ est toujours actif et on ne peut pas en afficher un autre, même s'il est dans l'autre form.

Ta soluce du timer n'est pas très propre, c'est vrai, mais c'est encore la plus simple. Sinon, il faudrait passer par des api et là, ça peut être encore moins propre et surtout plus compliqué.

Loup Gris
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
26
Il n'y a aucun bug

Essaie ceci

Dans la Form1

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
PopupMenu mnuPopup
End If
End Sub


Private Sub mnuAjouter_Click()
Form2.Show
End Sub

Dans la Form2

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
PopupMenu mnuPopup
End If


End Sub


Private Sub mnuAjouter_Click()
Unload Me
End Sub

jpleroisse
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
>> jpleroisse > C'est vrai qu'il n'y a pas de bug, comme je l'ai expliqué. Essaie ton code avec Form2.Show vbModal au lieu de Form2.Show pour voir.
Si tu ne mets pas vbModal, ça passera toujours.

Loup Gris
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010

Merci jpleroisse, effectivement ca fonctionne dans le MouseDown

En fait j'utilise un composant special pour mes boutons (HLBButton6.ocx) et j'ai mis le code dans le dropDown. Ca provoque ce bug. Parcontre si je mets le code dans le mouseDown ca fonctionne.

Mais bon, finalement je ne suis toujours coincé car l'interet d'utiliser ce composant etait de pouvoir afficher le menu déroulant quand on cliquait sur la petite fleche a coté du bouton et donc d'utiliser la methode dropDown. Si vous trouvez la solution pour que ce fonctionne avec ce composant
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
26
Exact je n'avais pas essayé avec vbModal.
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
>> globule > tu aurais pu expliquer tout ça dès le début. On aurait perdu moins de temps.

Loup Gris