Controles MENU

Résolu
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 - 15 janv. 2008 à 11:32
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 - 17 janv. 2008 à 11:20
salut à tous


j'ai une appli VB 6 connectée à une base SQL Server.


Cette appli possède un ensemble de menus, sous menus, etc...


J'ai une table dans le DB qui permet, pour chaque menu et chaque utilisateur de définir son droit d'accès :


Menu Articles => Accès complet, Accès restreint, Pas d'accès du tout


au lancement de l'appli, je charge les différent droit pour l'utilisateur et, dans le cas ou l'utilisateur n'a pas le droit d'accès à un menu, je fais MonMenu.Visible = False.


Le pb c'est que dans certains cas je peux me retrouver avec le menu principal sans aucun enfant. Ce que VB traduit par une belle erreur d'exécution 387.
Ex, avant application des droits j'ai le menu suivant
Tables,
      - Article
      - Client

après application des droits je n'ai que le menu "Table" d'actif. qui génère une err d'exécution décrite plus haut...

BREF, voilà, j'ai posé le contexte, j'en vient à la question...

Comment puis je obtenir une collection représentant l'ensemble des menus avec leurs différents niveaux.
ceci me permettrait de préparer les droits sur la collection et donc de réagir de manière intelligente, en désactivant le menu principal si l'utilisateur n'a le droit à aucune fonction de ce menu.

à ce jour, je m'en sors par des pirouettes mais je pense qu'il existe un moyen d'avoir une collection de menu représentant un truc du style
MenuName, MenuParent

donc, si quelqu'un a une idée... je vous remercie d'avance....

en espérant avoir été assez clair

@+

Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 janv. 2008 à 11:12
Bonjour

Là je ne saurais que te conseiller un recherche dans VBF (voire tout CS) , car là je suis à la limite de ma connaissance concernant ta demande.

dsl.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
15 janv. 2008 à 12:00
Bonjour

Une proposition :

une sub :
private Sub SetVisibleMenu(byval pVisible as boolean, byref pMenu as Menu)
    pmenu.visible=pVisible
    'Si pas de parent, on sort
    if pmenu.parent is nothing then exit sub
   
    'Parcour des controles pour trouver les frères du menu passé en paramètre
    dim lVi as boolean
    lvi=pVisible
    Dim lCtl as control
    for each lctl in me.controls
        if typeof lctl is menu then
            if lctl.parent is pmenu.parent then
                lvi=lvi or lctl.visible
                if lvi then exit for
            end if
        end if
    next
   
    'Et on passe le relai au menu parent
    SetVisibleMenu lVi,pMenu.Parent
end sub

Utilisation:

SetVisible False, MonMenu

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
15 janv. 2008 à 12:04
salut
merci pour ta réponse
j'avais bien pensé à utiliser le parent 
mais le pb c'est que le Parent renvoyé par VB est le  Form et pas le Menu réellement parent...
...

Pat

 Don't Worry , Be Happy

<hr />lorsque le problème est résolu, pensez Réponse Acceptée
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
15 janv. 2008 à 12:15
Bonjour

Autre proposition (liée à la première)

Dans ton Form_Load : tu met dans le Tag du Menu enfant le nom du menu parent (ce qui exclu la gestion des Index)
Puis à la place du test :
if lctl.parent is pmenu.parent then
tu met
if lctl.name = pmenu.Tag then

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
17 janv. 2008 à 11:03
merci mais bon pas top en terme de maintenance....

j'aurais éventuellement une utilisation d'API qui me renvoi l'arbre de menu...

si tu as une autre idée...

+@

Pat

 Don't Worry , Be Happy

<hr />lorsque le problème est résolu, pensez Réponse Acceptée
0
pneau Messages postés 258 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 27 octobre 2010 5
17 janv. 2008 à 11:20
merci quand meme...
bonne continuation....

Pat

 Don't Worry , Be Happy

<hr />lorsque le problème est résolu, pensez Réponse Acceptée
0
Rejoignez-nous