Astuce pour rendre invisibles tous les contrôles d'une forme

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 211 fois - Téléchargée 38 fois

Contenu du snippet

Cette astuce permet de mettre visible=false tout contrôle de la feuille contenant une chaîne déterminée dans sa propriété "Name". Ainsi pour cet exemple toutes les frames de la feuille contiennent la chaine "frame" dans leur nom et deviennent donc invisibles à l'activation de la feuille.

Source / Exemple :


Private Sub Form_activate()
    HideControls ("frame")
End Sub

Private Sub HideControls(str As String)
For i = 0 To Form1.Controls.Count - 1
    If InStr(1, Form1.Controls(i), str, vbTextCompare) <> 0 Then
        Form1.Controls(i).Visible = False
    End If
Next
End Sub

Conclusion :


Fournie par Manar.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007

+1 pour JeCommence
princefido n'avait rien compris a l'exemple VB.

Rien que pour reprendre l'argument :
<<<1 - Tu déclare O comme Object : Désolé mais ne comparons pas le type Object au tupe byte !!!>>>
Désolé, mais ne parles pas de ce que tu ne connais pas ! Dans le for each, l'Object que tu crois plus long ne fait que prendre la valeur du pointeur de chaque contrôle de ta feuille : c'est une valeur long, le "mot" le plus rapide sur un processeur 32 bits (les notres) en compilation. Je n'itère pas avec O, je le renseigne.

Il est encore temps de corriger ton code source, ça se fait pour ceux qui vont arriver sur ta source prochainement : met l'exemple de JeCommence : c'est mieux.

@+
Celiphane
Messages postés
10
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
1 mars 2003

princefido : Très bien, mais dans ce cas, je préfère le code de céliphane !
j'ai lu qq part sur ce site qu'il faut tjrs préférer un for each à un for next, question de rapidité ! et puis ce que tu dis c'est faux car si il y a plus de 255 controles ton byte va planter le programme, et il suffit de rajouter un test sur le nom de l'objet comme tu l'as fait pour dans ton code pour n'affecter que certains controles, par exemple (je m'inspire, j'avoue, des codes plus haut...dsl) :

Private Sub showctrl(ByVal flag As Boolean, byval str as string)
On Error Resume Next
Dim O As Object
For Each O In Me
If InStr(1, O.Name, str, vbTextCompare) <> 0 Then O.Visible = flag
Next O
End Sub

Un mélange des 2, c'est pas le meilleur ?
Messages postés
138
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
28 janvier 2006

Euh !! je veux pas jouer les troubles fêtes !! vous trouverez ce que vous cherchez ici :: http://fred.just.free.fr/francais/index.html vous recherchez dans les complémentes
Messages postés
5
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 décembre 2002

JeCommence : Ben, supposons que dans un prog' tu aies plusieurs frames et que tu ne veuilles faire apparaître qu'une à la fois, ben eu lieu de mettre invisible chaque frame, tu utilises cette astuce pour mettre tout invisible, ensuite tu remet visible la frame que tu veux faire apparaître !! Bien sur il y'a d'autres utilisation plus compliquées ...
Messages postés
5
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 décembre 2002

oué celiphane, c'est une idéé, mais voila pourquoi je ne l'utilise pas :
1 - Tu déclare O comme Object : Désolé mais ne comparons pas le type Object au tupe byte !!!
2 - Ca va mettre tout les objets en invisible, et si tu veux mettre que les frames et les textbox, il faudra écrire deux procédures une pour les frames et une pour les textbox

Sinon pour la déclaration du i, c'est que ce code fait partie d'un programme, et le i est déclaré dans les Option Explicit.
Merci quand même pour les critiques.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.