Comment vérifier l'état d'un control

Résolu
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009 - 18 août 2005 à 16:07
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009 - 22 août 2005 à 11:36
Bonjour, bonjour,

je cherche à vérifier le statut de plusieurs control ( label, combo, ... )
dans un frame spécifique.
Savoir si ils sont actifs ou non et visibles ou non...

Je pensais à un for each control, mais je galère...

Merci d'avance....

32 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 18:16
pourquoi tu MELANGES la proposition de Scortex sous .NET et la mienne sous VB6


une petite erreur par contre
MSDN : Conseil L'instruction Select Case peut s'avérer mieux adaptée à l'évaluation d'une expression simple qui possède plusieurs actions possibles. Toutefois, la clause TypeOf objectname Is objecttype ne peut pas être utilisée avec Select Case.



Donc petite variante en conséquence... (testé de suite)

Private Sub Command1_Click()
Dim Ctrl As Object


For Each Ctrl In Me
If Ctrl.Container Is Frame1 Then
If TypeOf Ctrl Is TextBox Then
MsgBox "TXT... contenu de " & Ctrl.Name & " : " & Ctrl.Text
ElseIf TypeOf Ctrl Is ComboBox Then
MsgBox "CBO... contenu de " & Ctrl.Name & " : " & Ctrl.Text
End If
End If
Next Ctrl


End Sub

PCPT
3
scortex84 Messages postés 379 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 20 avril 2011 1
18 août 2005 à 16:24
Hello,

En VB.NET : tu parcours les composants de ta form comme ça : me.controls(i)



While i < form.Controls.Count



If
TypeOf (form.Controls(i))
Is TextBox
Then



ElseIf
TypeOf (form.Controls(i))
Is Label
Then



End
If


i = i + 1



End
While

Si tu veux parcourir une frame, c'est pareil, il faut juste la trouver, ensuite c'est du style : me.controls(i).controls(i) , etc..

Seb.
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 16:30
merci pour le bout de code,

est-il valide sur VB6, j'avais omis de le préciser...

je le testerai de toute façon...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 16:44
Salut
non :

dim Ctrl as Objet
for each Ctrl in Me
Select case TypeOf Ctrl
Case TxtBox
If Ctrl.Text="machin" then Msgbox "blabla"
If Ctrl.Visible=True then Msgbox "blabla"

Case CommandButton
If Ctrl.Caption="machin" then Msgbox "blabla"
If Ctrl.Enabled=False then Msgbox "blabla"
'etc...
End Select
Next Ctrl

PCPT
0

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

Posez votre question
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 16:47
cela devrait ressembler à cela ???
j'ai une erreur avec ce qui suit

While i < Form.Controls.Count

If TypeOf Form.Controls(i) Is Frame Then

MsgBox "frame : " & Form.Controls(i).Name ' just pour le test
While j < Form.Controls(i).Controls.Count
MsgBox Form.Controls(i).Controls(j).Name 'just pour le test
Wend

End If

i = i + 1

Wend
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 16:49
j'ai oublié de préciser,

l'erreur est au deuxième while !!!
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 17:04
je modifie ma question,

j'ai des combos et des labels sur un frame dans un formulaire.
Je souhaite vérifier l'état de ces combos et labels, du frame,
pas les autres qui sont sur le formulaire...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 17:10
dans mon exemple, remplace Me par le nom de ta Frame.
c'est pas un mélange des propositions....

PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 août 2005 à 17:11
Salut, dans ce cas, préfixe avec le nom de ta frame en plus du nom de ta form :

Form.Frame.toncontrole.

Explik sommaire : le container de ton control est ta frame et le container de ta frame est ta form. Etc ...

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 17:12
et ensuite, séparément, tu fais le test de ta frame. (elle n'est pas considérée comme son contenant et contenu)
PCPT
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 17:22
bon bah marche pas !!!!

vb dit "l'objet ne gère pas cette propriété ou cette méthode"

Il ne veut pas de form.frame.controls ni de frame.controls
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 août 2005 à 17:44
Frame.controls ne sera jamais accepté car la collection controls ne fait partie que du container form (le nom de ta form).
Mais, dans l'expression form.frame.controls , remplace form par le nom de ta form (form1 ou le nom que tu lui as donné) et frame par le nom de ta frame (frame1 ou le nom que tu lui as donné).

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 août 2005 à 17:50
Si tu veux, je crée une form (que j'appelle 'totoform') et dedans je met une frame (que j'appele 'totoframe'). Dans cette frame je met un controle (textbox1). Ca donnera :

mavar = totoform.totoframe.textbox1.text

Là, tu affiches le contenu de textbox1 qui est dans ta frame totoframe, laquelle est dans ta form totoform.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Yaume1 Messages postés 86 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 13 septembre 2005 1
18 août 2005 à 18:00
je suis pas d'accord avec toi CanisLupus (mais je me trompe peut-être...)

Quand tu as textbox1 dans Frame1 dans Form1, tu fais
"Form1.TextBox1.text" ou "Form1.TextBox1.Left" ou ce que tu veux
d'autre, sans mettre le ".frame1" . Chez moi ça pédale dans la soupe si
tu lui dis comme toi tu fais !!!!



Bon courage en tous cas ;)





C2
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 18:02
ok ok !!!

ma form s'appelle faudit, mon frame frame1,
et j'ai dans le form label1, label2, combo1, combo2

donc si je souhaite énumérer ( pour l'exemple ) le nom des controls je devrais avoir un truc du genre :

dim Ctrl as Objet
for each Ctrl in faudit.frame1.controls '<== pour énumérer les controls
Select case TypeOf Ctrl '<== pour info mon vb demande le "Is" ici !!!
Case label
mytext = "Label : "
Msgbox mytext & ctrl.Name
Case Combobox
mytext = "Combobox : "
Msgbox mytext & ctrl.Name
'etc...
End Select
Next Ctrl

Et cela ne fonctionne pas !!!!
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 18:30
Merci PCPT,

cela fonctionne, il énumère mes controls dans mon frame,
et mon menu...

Etrange ???
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 18:39
si c'est bon, tu peux valider....
sinon, j'ai pas bien compris "et mon menu"

en plus haut, tu as écrit
"ma form s'appelle faudit, mon frame frame1, et j'ai dans le form label1, label2, combo1, combo2"

simple lapsus?
PCPT
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
18 août 2005 à 18:49
A propos de menu,
dans ma form j'ai un menu ( tu sais "Fichier", "Edition", ... )

Autrement cela fonctionne excepté cet imprévu ( pour le menu )

Après vérif :

j'ai une erreur lorsqu'il a fini d'énumérer les controls et qu'il tente d'énumérer le caption du frame.
Et ensuite il énumère le menu

J'ai ajouter un on error resume next
mais cela ne convient pas ( il énumère tjs le menu)
j'ai ajouter un on error goto myExit

et c'est ok...

Mais cela n'explique pas pourquoi il énumère le menu...
Si quelqu'un a une explication !!!

Merci à tous pour tout !!!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 août 2005 à 19:07
bah si t'es capable de faire et d'emprisonner un menu dans une frame, çà m'intéresse grandement ;)

si tu listes correctement uniquement les éléments qui t'interessent, posés sur la FRAME, qui est elle-même posée sur la FORM, comment veux-tu qu'un menu qui appartient à une FORM puisse être listé dans le contenu des objets de ta FRAME.....

PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 août 2005 à 19:33
drakkard > J'aimerais bien voir le code que tu as créé au final (si tu as tenu compte des réponses sur ce topic) et qui énumère le menu. Car il doit y avoir un prob.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous