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

cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
19 août 2005 à 09:15
Bonjour, bonjour

juste pour CanisLupus et PCPT, voici le code au final ( tjs en test ):

Private Sub Command1_Click()

Dim Ctrl As Object
Dim myString As String
Dim myVar

myVar = 0

For Each Ctrl In Me '<== Me ou Faudit ( nom de la form ) mmême résultat !!!
If Ctrl.Container Is Frame1 Then
On Error GoTo myExit
myString = myString & Chr(13) & Ctrl.Name
If Ctrl.Visible = True Then
myString = myString & Chr(9) & "vrai"
Else
myString = myString & Chr(9) & "faux"
End If
myVar = myVar + 1
End If
Next Ctrl

MsgBox myString & Chr(13) & myVar

myExit:
MsgBox myString & Chr(13) & myVar

End Sub
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
19 août 2005 à 11:58
OK, je vois. Ton menu est un controle mais ne possède pas la propriété Container donc plantage. Pour éviter ça :

For Each Ctrl In Me '<== Me ou Faudit ( nom de la form ) mmême résultat !!!
if not(typeof ctrl is Menu) then
If Ctrl.Container Is Frame1 Then
On Error GoTo myExit
myString = myString & Chr(13) & Ctrl.Name
If Ctrl.Visible = True Then
myString = myString & Chr(9) & "vrai"
Else
myString = myString & Chr(9) & "faux"
End If
myVar = myVar + 1
End If
end if
Next Ctrl

Ca zappera le (ou les) menus.

-------------------------------------------------
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
19 août 2005 à 13:52
désolé, je vois toujours pas. le menu n'est pas contenu dans la Frame. logiquement, il n'est pas listé. (et tests hier avec un menu, pas d'erreur)

le truc drakkard, c'est que tu voulais diférencier les types hier, et là, tu ne le fais plus.....
donc après le "is dans frame......"mystring mystring & "*" & ctrl.name & ".Visible " & Ctrl.visible & vbcrlf
myvar = myvar+1 'que tu devrais typer d'ailleurs

....
msgbox mystring & "Total : " & myvar & " contrôle(s)"
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
19 août 2005 à 14:41
Je te rappelle PCPT,

que je cherche depuis le début,
à savoir si des controls dans un frame sont visibles ou non et actifs ou non...
Trève de parenthèses.

Je vais être plus clair :
ma Form : faudit contient :
- un MonthView
- un Picture
- un Frame : frame2 je me fous des controls de celle-ci.
- un Frame : frame1 avec quelques controls dont je veux vérifier le statut.
- un DataGrid
- un Adodc
- un ImageList
- un Menu

Et ils sont controlés dans cet ordre : MonthView, Picture, ...
( ordre de la liste ci-dessus ).
Donc étonnant qu'il affiche Menu et ImageList ( je l'avais oublié celui là ),
mais seulement ces deux autres controls !!!!

Voilà voilà !!!
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 août 2005 à 15:20
qu'il y ait d'autres conmposants, c'était plutôt évident. çà ok. j'en reviens (désolé d'insister lourdement) sur le fait que ta Fame ne peut pas contenir de menu. donc si tu ne listes que "ses enfants", tu ne devrais pas avoir d'erreur à gérer. après ok, là çà fonctionne, donc ok. mais c'est + pour comprendre vraiment. désolé, j'ai du me cogner violemment, mais je bloque!
j'ai fais les tests en même temps, au cas ou qqc m'aurait échappé. pas d'erreur chez moi.

Dim Ctrl As Object
For Each Ctrl In Me
If Ctrl.Container Is Frame1 Then _
If ((TypeOf Ctrl Is TextBox) Or (TypeOf Ctrl Is ComboBox)) Then _
MsgBox Ctrl.Name & ".Enabled = " & Ctrl.Enabled & VbCrlf & _
Ctrl.Name & ".Visible = " & Ctrl.Visible
Next Ctrl

on ne prend que le Visible et Enabled des combo et Text contenu dans Frame1.
c'est ce TypeOf qui justement, t'empêche de tomber sur un contrôle qui n'a pas la propriété générant l'erreur...

PCPT
0
cs_drakkard Messages postés 99 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 20 janvier 2009
19 août 2005 à 15:53
Cela ne me dérange pas que tu insistes.
Au contraire...

Moi aussi je ne vois pas pourquoi il m'affiche ces deux controls qui ne sont pas dans le frame.
Heeuuu, je sais qu'un frame ne peut contenir de Menu.
A propos de l'erreur, elle apparait lorsque le code tente de récupérer l'état du caption du frame, oui oui !!!
Il énumère tout les controls du frame et ensuite tente d'énumérer le caption...
je n'ai que cette erreur, après c'est l'histoire des autres controls affichés
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 août 2005 à 16:21
tu veux bien essayer mon p'tit bout de code au dessus stp?
là on ne gère que le contenu de la Frame1, pas la Frame1 elle-même. si tu as une erreur à sa lecture, c'est dans une autre partie de code que toutes les participations de chacun. tu peux copier cette partie?

PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
19 août 2005 à 16:41
pcpt > fais le test comme je l'ai fait (c'est à dire avec un menu sur la form, créé par le créateur de menus) et tu comprendras : le menu ne possède pas de propriété container en vb6 mais est listé dans la collection des controles donc ça plante forcément sur la ligne if ctrl.container... au moment où c'est le menu qui est testé.
Je reconnais que je me suis banané pour le coup du form.frame.control, désolé, j'ai de plus en plus tendance à penser en dotnet. Mais c'est ton code que j'ai testé sous vb6 et il plante d'où mon précédent post.

PS : Une ImageList n'a pas non plus de propriété container donc 2ème possibilité de plantage. Alors, soit on s'amuse avec des on error, soit on teste le type des controles avant de tester leur container.

Pas besoin de s'énerver, on va y arriver.

-------------------------------------------------
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
19 août 2005 à 17:13
arf, bah j'y comprend plus rien.
j'avais fait les tests avec le menu, enfin, tout comme il faut, et j'avais pas d'erreur. je viens de recopier mon code, et en effet, çà plante (logiquement) sur le menu...

je donne suite rapidement^^
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 août 2005 à 17:33
bon, voici le principe (donc pas de gestion d'erreur) mais il faut compter pour ne pas répertorier un objet déjà lu :

j'ai un menu, un bouton, et une frame, qui contient 3 txtbox

Option Explicit
Private Sub Command1_Click()
Dim Ctrls As Object, MyFrame As Object, MyCtrl As Object


Set MyFrame = Me.Frame1.Container


For Each Ctrls In Me
For Each MyCtrl In MyFrame
If ((TypeOf MyCtrl Is TextBox) Or (TypeOf MyCtrl Is ComboBox)) Then _
Debug.Print MyCtrl.Name & ".Enabled = " & MyCtrl.Enabled & " || " & _
MyCtrl.Name & ".Visible = " & MyCtrl.Visible
DoEvents
Next MyCtrl
Next Ctrls
Set MyFrame = Nothing
End Sub

et voici la trace :
Text3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible VraiText3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible VraiText3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible VraiText3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible VraiText3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible VraiText3.Enabled Faux || Text3.Visible VraiText2.Enabled Vrai || Text2.Visible FauxText1.Enabled Vrai || Text1.Visible Vrai

donc là, plus de problème, par contre.... il fait le test autant de fois qu'il y a de contrôles * Nbcontrôle dans frame1....
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 août 2005 à 17:41
umm, nous voilà au même point !

Option Explicit
Private Sub Command1_Click()
Dim Ctrls As Object, MyFrame As Object, MyCtrl As Object


Set MyFrame = Me.Frame1.Container


For Each MyCtrl In MyFrame
If ((TypeOf MyCtrl Is TextBox) Or (TypeOf MyCtrl Is ComboBox)) Then _
Debug.Print MyCtrl.Name & ".Enabled = " & MyCtrl.Enabled & " || " & _
MyCtrl.Name & ".Visible = " & MyCtrl.Visible
DoEvents
Next MyCtrl
Set MyFrame = Nothing
End Sub

pas d'erreur
PCPT
0
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,

Voici le code que j'utilise et qui fonctionne...

Encore merci pour votre aide !!!!

Dim Ctrl As Object
Dim myString As String
Dim myVar As Variant

myVar = 0

For Each Ctrl In Faudit
If TypeOf Ctrl Is ImageList Or TypeOf Ctrl Is Menu Then

ElseIf Ctrl.Container Is Frame1 Then
'On Error GoTo myExit
myString = myString & Chr(13) & Ctrl.Name
If Ctrl.Visible = True Then
myString = myString & Chr(9) & "vrai"
Else
myString = myString & Chr(9) & "faux"
End If
myVar = myVar + 1
End If
Next Ctrl

MsgBox myString & Chr(13) & myVar

'myExit:
'MsgBox myString & Chr(13) & myVar
0
Rejoignez-nous