Gambas France BETA


Pas de compte ? Incription

Changer la propriété de plusieurs label

Ce sujet est résolu.

12
AuteurMessages
stracoma#1 Posté le 16/5/2017 à 00:06:38
Apprentissage programmation pour le plaisirBonsoir à vous tous.
J'ai besoin de votre aide pour résoudre un problème.
J'ai 8 labels: label_1, label_2, .... label_8.
je veux, par une seule instruction changer la couleur du texte des labels. une chose comme(mais qui ne marche pas):
for each lbl as label in me
lbl.foreground=color.red
next

Merci
SVP patience avec moi car neurones > 50 ans
didier18#2 Posté le 16/5/2017 à 01:17:11
Bonsoir stracoma

Tu peux faire par exemple :
1
2
3
4
DIM i AS INTEGER
FOR i = 2 TO 10 'pour les labels de 2 à 10
lbl[i].foreground=color.red
NEXT

Le seul impératif est d'avoir au préalable créé un tableau de tes "lbl" et d'avoir mis leur numéro dans le "Tag"...
NB : Tu peux agir de la même façon sur des boutons, des TextBox etc...

Bonne soirée.
vuott#3 Posté le 16/5/2017 à 02:56:56
Ne cedere ineluctabili possimusUne autre hypothèse pourrait être: :|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC SUB Form_Open()

DIM ob AS OBJECT

Label1.Text = Label1.Name
Label2.Text = Label2.Name
Label3.Text = Label3.Name
Label4.Text = Label4.Name

FOR EACH ob IN ME.Children
IF Object.Type(ob) = "Label" THEN ob.Foreground = Color.Red
NEXT

END
« Vita non suavis esse potest, nec Mors amara. »
spheris#4 Posté le 16/5/2017 à 10:28:19
Une solution en utilisant les TAG de chaque lable non?
Stracoma, modifie ta signature ;) ;) ;)

aPPrentissage et non aPrentissage
;) ;) ;) ;)
Flachy Joe#5 Posté le 16/5/2017 à 14:18:07
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
En filtrant les noms, (ou les tags ou autre) ce qui permet de choisir facilement lesquels on modifie si on ne veux pas les changer tous :
1
2
3
4
5
6
7
DIM obj AS Control

FOR EACH obj IN ME.Children
IF obj.Name LIKE "lblToChange*" THEN
obj.Foreground = Color.Red
ENDIF
NEXT
;) Flachy Joe ;)
Patrick#6 Posté le 16/5/2017 à 15:52:29
Bonjour,
Sinon une autre idée :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PUBLIC SUB Form_Open()

ValueBox1.Visible = FALSE
ValueBox1.Value = Color.Red

END

PUBLIC SUB ValueBox1_Change()

Label1.Background = ValueBox1.Value
Label2.Background = ValueBox1.Value
Label3.Background = ValueBox1.Value

END

PUBLIC SUB Button1_Click()

ValueBox1.Value = Color.Blue

END

Je viens de m’apercevoir que j'ai utilisé Background, vous rectifierez vous mêmes.
stracoma#7 Posté le 17/5/2017 à 10:47:54
Apprentissage programmation pour le plaisirBonjour et merci à vous pour vos réponses.
Je retient le code de Flachy Joe car il évite d'initialiser un à un tous les labels; par contre il présente un défaut de taille: obj n’accepte pas toutes les propriétés des labels. obj.Foreground marche mais obj.Text ne marche pas
SVP patience avec moi car neurones > 50 ans
vuott#8 Posté le 17/5/2017 à 13:58:46
Ne cedere ineluctabili possimusLe code, j'ai proposé, n'a pas besoin d'initialiser un à un toutes les Label: Label1.Text = Label1.Name etc.. était simplement un exemple.
« Vita non suavis esse potest, nec Mors amara. »
stracoma#9 Posté le 17/5/2017 à 14:07:25
Apprentissage programmation pour le plaisirEffectivement, vuott, votre code fait l'affaire:
ce code marche:
Dim obj As Control

Dim ob As Object


For Each ob In Me.Children
If Object.Type(ob) = "Label" Then
ob.Foreground = Color.Red
ob.Text = "Bonjour"
Endif
Next

Merci à vous
SVP patience avec moi car neurones > 50 ans
Flachy Joe#10 Posté le 17/5/2017 à 16:14:40
Iguane : Il Gambas Uniquement pour Activer ses NEuronesstracoma : effectivement, avec obj défini comme control tu n'as accès qu'aux propriétés communes à tous les contrôles.
Mais il suffit de faire
1
2
3
4
5
6
DIM obj AS OBJECT '#####
FOR EACH obj IN ME.Children
IF obj.Name LIKE "lblToChange*" THEN
obj.Foreground = Color.Red
ENDIF
NEXT

pour que mon code fonctionne avec n'importe quelle propriété. Du coup tu n'es pas limité à un type de contrôle, tu peux changer d'un coup le text d'une textBox, d'un label et d'une combobox et ne pas toucher aux propriétés d'un autre label par exemple.
;) Flachy Joe ;)
stracoma#11 Posté le 17/5/2017 à 16:42:34
Apprentissage programmation pour le plaisirMerci Flachy Joe, ton message m'a appris des choses.
Clair eau de roche
SVP patience avec moi car neurones > 50 ans
Patrick#12 Posté le 22/5/2017 à 14:06:21
Bonjour,
Cette solution fonctionne bien si tous vos contrôles se trouvent dans le même container, mais si vous faites comme moi et utilisez des containers pour ranger vos contrôles .... Ça ne fonctionne plus.
Flachy Joe#13 Posté le 22/5/2017 à 21:48:03
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut Patrick,
Dans ce cas il suffit de faire

1
2
3
4
5
6
DIM obj AS OBJECT
FOR EACH obj IN ME.Controls '#####
IF obj.Name LIKE "lblToChange*" THEN
obj.Foreground = Color.Red
ENDIF
NEXT
;) Flachy Joe ;)
Patrick#14 Posté le 23/5/2017 à 15:43:05
C'est sympa, on peut même récupérer les objets d'une classe et à priori d'autre choses aussi. A creuser
Merci Flachy Joe.
stracoma#15 Posté le 28/5/2017 à 20:50:26
Apprentissage programmation pour le plaisirBonjour
Et pourquoi ce code ne marche pas
1
2
3
4
5
6
7
8
PUBLIC SUB Button1_Click()

DIM obj AS Label
FOR EACH obj IN ME.Children
obj.Foreground = Color.DarkRed
NEXT

END

Je crois que dans ce code, "For Each" parcourt tous les objets de la fenêtre, alors que moi j'ai spécifié que obj est de type Label
SVP patience avec moi car neurones > 50 ans
12