Problème Textbox [Résolu]

Signaler
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour a vous,

Je viens vous voir car j'aimerais avoir une explication sur un comportement que je considére comme anormal.

Je m'explique...J'ai un formulaire dans lequel j'ai plusieurs textbox appartenant a un groupe de contrôle. Chaque textbox a comme propriété Enabled et visible = True.

De plus j'ai une petite fonction qui fait office d'inverseur.
Private Sub Enable(Ctrl As Object)
    Ctrl.Enabled = Not Ctrl.Enabled
    Ctrl.Visible = Not Ctrl.Visible
End Sub


Or il apparait que lorsque j'arrive dans cette procédure j'ai bien ma propriété enabled a True mais la propriété visible est a False sans que j'y soit intervenu...

Une idée !!!

Cordialement

12 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour, us_30

Pourquoi ne serait-il pas valide, ce code ?
Il l'est ! seule l'évènement Load est à changer pour l'évènement Activate.
Sous VB6, existent les groupes de contrôles indexés. Et c'est ce qu'il utilise.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
ce n'est pas cette seule "fonction" (qui n'est d'ailleurs pas une fonction, mais une simple procédure), qui nous permettra de te répondre, mais le code de la procédure événementielle d'où tu appelle cette procédure !
Précise-nous par ailleurs :
- comment tu as vérifié que la propriété visible était à True lors de l'appel
- comment tu as vérifié que la propriété visible était à False à l'entrée de la procédure Enable
- si des éléments de ce groupe ont ou non été créés dynamiquement (et si oui : par quel code).
Ces TROIS précisions sont ici nécessaires.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012
1
Alors en effet c'est une procédure...(simple abus de langage)

Pour mes vérifications j'ai utilisé l'espion en avançant en pas a pas...mais sachant qu'il n'est pas fiable j'ai aussi mis un msgbox aux endroits nécessaire (avant l'appel et après l'appel)

De plus le résultat est visible car mes textbox ne sont pas crées dynamiquement et que le résultat est conforme a mes attentes pour des labels. (tout mes contrôles sont positionnés sur mon formulaire)

Enfin pour être plus précis, ce bout de code est appelé dans mon événement load de mon formulaire qui ne fait pas grand chose de plus...pour le moment
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour,

En effet, en VB6, modifier une propriété (Enabled ou Visible) ne mets pas immédiatement cette valeur à jour.

Par exemple :
TxtBx.Enabled=False
TxtBx.Visible=TxtBx.Enabled

Si le contrôle était avait Enabled à True avant, il restera visible.

Je pense qu'il faut un DoEvents ou un truc du genre pour mettre à jour l'information.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonjour,

Un control qui n'est plus visible n'est plus aussi accessible à l'utilisateur... Par conséquent, quel est l'intérêt de jouer sur Enabled ? Mieux vaut utiliser une ou l'autre propriété, qui ne pas de problème, plutôt que les deux à la fois.

Amicalement,
Us.
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour,

Pour l'avoir constaté, je l'ai mis.
ça explique aussi pourquoi la valeur lue dans la même procédure/fonction est fausse.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
ce bout de code est appelé dans mon événement load de mon formulaire

malheureux choix, que celui de cet évènement, de toutes manières !
Rien ne permet, lors de cet évènement de chargement, d'affirmer que le(s) contrôle(s) concerné(s) est/sont déjà chargé(s) !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012
1
Bien...

Vos infos sont intéressantes mais s’éloigne de mon interrogation...

Donc la question principales est : Pourquoi alors que les 2 propriétés sont vrai, je me retrouve avec un faux dans le visible sans aucun appel de ma part ? En comptant que cela se produit que sur un contrôlé textbox, sur un contrôle label cela fonctionne parfaitement

Pour ce qui est du choix du load...En effet pour être sur d'avoir le contrôle chargé j'aurais pu le mettre dans l’événement activate...

Par contre je suis surpris.
Si le contrôle était avait Enabled à True avant, il restera visible.

Il est tout a fait possible de mettre des contrôle invisible même si l'enabled est a vrai !!!

Cordialement
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour,

Par contre je suis surpris.

Si le contrôle était avait Enabled à True avant, il restera visible.

Il est tout a fait possible de mettre des contrôle invisible même si l'enabled est a vrai !!!


Cette remarque est en lien avec le code de mon message, d'où la remarque.
Ne pas la sortir de son contexte.

Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
relis mes réponses, Phalalis



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bon ...
Je viens quand même de "me fendre" d'un petit test bien inutile (je t'avais déjà dit !)

Test :
J'ai mis sur un Form plusieurs textboxes indexées (groupe indexé)
et j'ai mis ce cçode, mais pas dans l'évènement Load (of course !), mais dans l'évènemebnt Activate (lorsque les conbtrôles sont TOUS chargés).
Private Sub Form_Activate()
  For i = 0 To Text1.Count - 1
    Enable Text1(i)
  Next
End Sub


Sans aucun problème d'exécution (bien entendu).
Alors que le même esqsai au Load est inopérant, surtout si tu as d'autres contrôles avant tes textboxes

Conclusion : tu devrais t'abstenir de remarques du genre de celle que tu as faite ici :
Vos infos sont intéressantes mais s’éloigne de mon interrogation...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Bonjour,

de toute façon le code proposé au premier post n'est pas valide.

Voici un code plus approprié :

Private Sub Command1_Click()

Dim Ctrl As Control
For Each Ctrl In Me.Controls
    If TypeName(Ctrl) = "TextBox" Then
        Ctrl.Enabled (Ctrl.Enabled False)
        Ctrl.Visible (Ctrl.Visible False)
    End If
Next

End Sub


Mets des textbox et un bouton.

Et il n'y a alors aucun bug.

Si tu veux plus sophistiqué adapte le code ici : Ici

Ensuite, Phalalis, si tu veux te torturer pour avoir le même résultat avec quelle que chose qui ne veut dire, c'est plus une recherche d'une solution, mais du papotage... et ne me regardes plus.

Amicalement,
Us.