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

0/5 (8 avis)

Snippet vu 4 505 fois - Téléchargée 42 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
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
27 déc. 2004 à 15:13
+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
JeCommence Messages postés 10 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 1 mars 2003
5 déc. 2002 à 19:28
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 ?
FrostByte Messages postés 138 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 28 janvier 2006
5 déc. 2002 à 18:47
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
cs_princefido Messages postés 5 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 5 décembre 2002
5 déc. 2002 à 14:17
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 ...
cs_princefido Messages postés 5 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 5 décembre 2002
5 déc. 2002 à 14:09
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.