ASTUCE POUR RENDRE INVISIBLES TOUS LES CONTRÔLES D'UNE FORME

hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 - 5 déc. 2002 à 13:54
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
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5268-astuce-pour-rendre-invisibles-tous-les-controles-d-une-forme

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.
JeCommence Messages postés 10 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 1 mars 2003
5 déc. 2002 à 13:59
slt à tous

je comprends pas à quoi ça vous sert de cacher les contrôles de la feuille...
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
5 déc. 2002 à 13:56
C'est pas terrible de ne pas déclarer ta variable i, puis en plus, le for next implique une incrémentation en mémoire, ca prend du temps machine...

prend plutot ce code :

Private Sub showctrl(ByVal flag As Boolean)
On Error Resume Next
Dim O As Object
For Each O In Me
O.Visible = flag
Next O
End Sub

c mieux ! en plus, le parametre peut prendre true ou false selon que tu veux cacher ou afficher les controles !

@+ slt ! et bonne prog'
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
5 déc. 2002 à 13:54
nox (il me semble que c lui) avait deja mis ca sur le site, sous je ne sais plus quel nom de source....
c'est pratique en tt cas
Rejoignez-nous