- Appeler les contrôles d'un état par leur index ?
- Appeler en privé - Guide
- Index telephonique france - Guide
- L'état actuel de votre sim ne requiert aucune activation ✓ - Forum Mobile
- Aide etat reparation electromenager - Accueil - Sauvegarde
- Etat batterie pc portable - Guide
6 réponses
12 juil. 2022 à 18:10
bonjour,
Peux-tu montrer comment ton code fait appel aux contrôles?
Qu'as-tu essayé comme "For each control .... Next"? C'est l'objet en "in" qui pose problème, ou le type de "control"? Souvent mieux de séparer:
dim liste as aaa, control as bbb set liste = ... for each control in liste ... next control
As-tu envisagé de partir d'une liste des noms des contrôles? Tu peux alors simplement boucler dans la liste.
Peux-tu partager un fichier exemple?
Bonjour et merci pour ta réponse.
Comme j'ai dit dans ma question la difficulté n'est pas dans le lancement de la boucle, j'ai bien écrit
For Each Ctrl In CodeContextObject.Section(N).Controls où Section(N) est la section où se trouve les contrôles à masquer.
La difficulté est dans l'appel des contrôles avec Index ou tabIndex pour lesquels je bute sur la syntaxe.
Ci-dessous un exemple de cce que j'ai écrit mais qui ne donne pas ce que j'attends
With CodeContextObject.Section(N)
Do
m = m + 1
TabIndex = m
Ctrl = Ctrl.TabIndex (m)
If Ctrl = 0 Or IsNull(Ctrl) Then
Ctrl.Visible = no
Else
Ctrl.Visible = yes
End If
CtrlSuivant:
Loop Until m > 500
End with
12 juil. 2022 à 20:53
Les petits morceaux de code que tu montres ne nous permettent pas d'avoir une vue d'ensemble.
Peux-tu partager un fichier exemple?
12 juil. 2022 à 20:57
peut-être:
For Each Ctrl In CodeContextObject.Section(N).Controls If Ctrl = 0 Or IsNull(Ctrl) Then Ctrl.Visible = false Else Ctrl.Visible = true End If next Ctrl
J'ai donc essayé la boucle que tu proposes, qui est à peu près celle que j'avais bâtie à l'origine, et elle me sort tous les éléments de la section, y compris ceux qui ne sont pas des contrôles, les étiquettes, les traits de séparation entre les blocs de données. C'est donc pour cela que je voulais les index , pour être sûr qu'il ne répertorie que les vrais contrôles.
13 juil. 2022 à 08:05
Tu peux sans doute examiner le type de contrôle, pour ne garder que ceux qui t'intéressent.
18 juil. 2022 à 13:07
Quand tu écris "contrôle", penses-tu "textbox"?
Si oui, comme suggéré le 13 juil. 2022 à 08:05, tu peux faire ainsi:
Dim Ctrl As Control, N As Integer For Each Ctrl In CodeContextObject.Section(N).Controls If Ctrl.ControlType = acTextBox Then If Ctrl = 0 Or IsNull(Ctrl) Then Ctrl.Visible = False Else Ctrl.Visible = True End If End If Next Ctrl
Ce code examine le type de chacun des contrôles de la section, et ne traite que les boîtes de texte, et pas les autres contrôles: les étiquettes, les traits de séparation, ...
Bien sûr ! C'est ce que j'ai fait en sélectionnant ceux qui ont un nombre pour index.ça marche; mais le problème, c'est qu'après, même en ne conservant que ces contrôles, il ne masque pas ceux dont la valeur est égale à 0. Et c'est précisément ce que je veux obtenir.
14 juil. 2022 à 20:38
Je suggère d'ajouter à la boucle en #5 un test pour ne traiter que les contrôles qui t'interessent. As-tu compris la suggestion, et fait cela? J'en doute, vu ta réponse en #9.
Pourquoi ne montres-tu pas alors le code de ce que tu as fait?
Tu demandes des suggestions, et, à chaque suggestion, tu réagis avec des objections. J'ai l'impression que tu ne cherches pas de solution, tu cherches uniquement à montrer que tu as déjà tout essayé.
Pour que cette discussion soit constructive, partage un fichier exemple, avec ton code, décris le résultat obtenu, et le résultat attendu.
Autrement, je ne vois pas comment t'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMerci de ta réponse. Excuse moi de répondre si tard, je ne l'avais pas vue.
Pour ce qui est du contenu lui-même de ta réponse, il ne s'agit pas du tout de ça. En général, quand je pose une question, c'est parce que je bute sur un point particulier; je peux toujours bénéficier d'autres suggestions mais comme je sais où je veux aller, je trouve trop compliqué de tout expliquer et après de dire que je ne veux pas ceci ou cela parce que ceci ou cela, parce que ça ne correspond pas à mon programme. C'est aussi ce que je fais dans mes réponses; je ne cherche pas à savoir le pourquoi mais j’essaie d'expliquer le comment faire sans chercher à connaitre le code du début à la fin.
Cela dit, j'ai fini par trouver la réponse que je cherchais, je la mettrai en ligne, dès que j'aurai fini, pour ceux qui seraient intéressés. C'était finalement très simple, il suffisait de savoir.
Modifié le 18 juil. 2022 à 13:37
Salut,
If Ctrl = 0 Or IsNull(Ctrl) Then
Ce ne serait pas en testant plutôt :
Ctrl.Value = 0
Merci de ta réponse.
Pour ce qui est de ta suggestion la réponse est "non", parce que a valeur par défaut de "Ctrl" est "value", càd qu'on écrive xxxxx = Ctrl ou xxxxx = Ctrl.Value cela donne exactement le même résultat.
Cela dit, pour être absolument certain de ne ramener que des valeurs non-nulles, j'avais poussé le vice jusqu'à écrire : "If not (IsNull(Ctrl) or IsEmpty(Ctrl) or Ctrl = 0) then ...... " .
Mais ce n'est pas là mon problème; il est de sélectionner les contrôles adéquats par leur Index.
Merci encore.
12 juil. 2022 à 18:33
J'essaierais une de ces trois techniques: