megamario
Messages postés67Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention22 novembre 2018
-
Modifié le 2 juil. 2018 à 18:53
Whismeril
Messages postés18290Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention24 mars 2023
-
2 juil. 2018 à 16:04
Bonjour à tous,,
J'ai un petit souci avec des passages de paramètres à un objet que j'ai crée.
Cet objet (MultiRoundLabel) comporte jusqu’à 4 autres objet (créer aussi RoundLabel)
Voila mon RoudLabel:
Et mon MultiRoundLabel:
Mon souci c'est avec le passage de paramètres d'un tableau de string (pour changer les textes des Labels)
Public Property m_Text() As String()
Get
Return _Text
End Get
Set(value As String())
_Text = value
For i As Integer = 0 To _NbLabelMax
_MesLabels(i).m_Text = _Text(i)
Next
Refresh()
End Set
End Property
_MesLabels c'est bien-sur mes RoundLabel x 4
Lorsque je souhaite changer l'un des labels, si je fait cela:
MultiRoundLabel1.m_Text(0) = "Mon nouveau label 0"
Le process ne rentre pas dans le property, Donc je n'est pas la mise à jour de mes labels ou du moins de celui que j'ai besoin de changer.
Pourtant si j’interroge de nouveau:
dim s as string = MultiRoundLabel1.m_Text(0)
s est bien égale à "Mon nouveau label 0"
Pour que cela fonctionne je suis obligé de faire:
Dim txt() as string
txt = MultiRoundLabel1.m_Text
txt(0) = "Mon Nouveau Label 0"
MultiRoundLabel1.m_Text = txt
Et la je rentre bien dans property avec la mise à jour des RoundLabel.
Suis-je obligé d'en passer par là ou y a t'il une solution.
J'ai le même souci avec toutes mes propriétés avec tableau.
J'ai pas de souci en édition donc tout ce qui est propre à l'édition (mes couleurs, font, taille etc), pas de souci.
Mais par exemple avec la Visibilité des Labels j'ai le même souci:
Public Property m_Visible() As Boolean()
Get
Return _Visible
End Get
Set(value As Boolean())
_Visible = value
Dim j As Integer = 0
For i As Integer = 0 To _NbLabelMax
_myPanel(i).Visible = _Visible(i)
If _myPanel(i).Visible Then
j = j + 1
End If
_myPanel(i).Top = (j - 1) * (_Height + _Espace)
Next
Me.Height = (j * _Height) + (j * _Espace)
Refresh()
End Set
End Property
Petite explication, j'ai des Panel qui accueil mes RoundLabel (dessin) cela me permet de les rendre invisible si besoin. Et je redimensionne mon MultiRoundLabel en conséquence.
Mais la encore pour que le Property sois exécuté il faut que je lui envoie le tableau complet et pas seulement _visible(0) = true
Whismeril
Messages postés18290Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention24 mars 2023622 2 juil. 2018 à 13:04
Bonjour,
Ta propriété c’est le tableau entier. Pas le contenu d’un item.
Si je fais une comparaison (un peu tirée par les cheveux, mais parlante je pense) avec Excel.
Ta propriété c’est le chemin du fichier.
Modifier le contenu d’une cellule, n’impacte pas le chemin du fichier.
Tu as plusieurs options qui me viennent en tête:
celle que tu as utilisée
mettre Refresh publique et l’appeler après chaque modifications
écrire un setter avec le texte à saisir et l’index en paramètres, ce setter appelant la méthode Refresh
utiliser une ObesrvableCollection plutôt qu’un tableau, et abonner ton objet aux changements de celle-ci.
rendre ton objet indexable, la méthode indexée chargeant le bon label et le Resfresh
et sans doute d’autres....
megamario
Messages postés67Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention22 novembre 2018 2 juil. 2018 à 13:21
Merci Whismeril,
J’espérais qu'il y aurait eue un mot clef éventuellement à ajouter au property.
Ce qui me surprend c'est que lorsque je rappel la variable que je viens de modifier elle est prise en compte...
D'ailleurs j'ai créé une méthode public dans MultiRoundLabel permettant de faire un update des paramètres et cela fonctionne bien, mon tableau privé dans MultiRoundLabel à bien été mis à jour.
Pour le moment j'ai repris ma solution en la plaçant dans une méthode permettant de traiter le texte, le tooltip, la visibilité. ainsi cela reste concentré dans une méthode et pas éparpillé partout. Se qui me gène c'est que j'ai une quantité variable de RoundLabel, donc pour sauvegarder le tableau avant de le modifier je doit lui donner la dimension. Je fait un Redim mais bon il me semble que c'est lent cette fonction.
Mais je prend note de vos autres propositions et je regarde cela.
Merci beaucoup.
Whismeril
Messages postés18290Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention24 mars 2023622 2 juil. 2018 à 13:57
Une List(of....) est toujours plus pratique à utiliser qu’un tableau, tu ajoutes, ou enlève des items sans problème.
Quite, à changer ton tableau pas une autre collection, dans ton cas, essaye l’observablecollection
Whismeril
Messages postés18290Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention24 mars 2023622 2 juil. 2018 à 13:59
Quand au fait que l’item dans tableau privé soit modifié c’est normal.
Mais comme tu n’as pas modifié le tableau entier, tu n’es pas passé dans la propriété et donc Refresh n’est pas appelé.
megamario
Messages postés67Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention22 novembre 2018
>
Whismeril
Messages postés18290Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention24 mars 2023 2 juil. 2018 à 14:18
Merci Whishmeril, c'est bien ce que j'au cru comprendre pour le refresh, mais sur le coup cela m'a perturbé.
je connaissais pas observablecollection, je vais regarder cela. J'utilise beaucoup les dictionnaires et collections, je sais qu'il y en a d'autre comme list(of) que j'ai utilisé pour des classes serialisable pour faire du XML, Mais j’avoue que je mis suis pas trop penchez dessus.
Je m’était cotonné au tableau de string pour avoir l'information en mode édition sur mon objet graphique, mais à vrai dire pour le texte j'en ai pas besoin en édition, d'ailleurs je lui est mis les mêmes textes que dans le constructeur de mon objet graphique MiltiRoundLabel. Je pourrais passer par une simple méthode. Mais cela m'a appris quelques chose.
En tout cas merci beaucoup pour ces explications clair, et je vais regarder ce observablecollection cela m'intrigue.
2 juil. 2018 à 13:21
J’espérais qu'il y aurait eue un mot clef éventuellement à ajouter au property.
Ce qui me surprend c'est que lorsque je rappel la variable que je viens de modifier elle est prise en compte...
D'ailleurs j'ai créé une méthode public dans MultiRoundLabel permettant de faire un update des paramètres et cela fonctionne bien, mon tableau privé dans MultiRoundLabel à bien été mis à jour.
Pour le moment j'ai repris ma solution en la plaçant dans une méthode permettant de traiter le texte, le tooltip, la visibilité. ainsi cela reste concentré dans une méthode et pas éparpillé partout. Se qui me gène c'est que j'ai une quantité variable de RoundLabel, donc pour sauvegarder le tableau avant de le modifier je doit lui donner la dimension. Je fait un Redim mais bon il me semble que c'est lent cette fonction.
Mais je prend note de vos autres propositions et je regarde cela.
Merci beaucoup.
2 juil. 2018 à 13:57
Quite, à changer ton tableau pas une autre collection, dans ton cas, essaye l’observablecollection
2 juil. 2018 à 13:59
Mais comme tu n’as pas modifié le tableau entier, tu n’es pas passé dans la propriété et donc Refresh n’est pas appelé.
2 juil. 2018 à 14:18
je connaissais pas observablecollection, je vais regarder cela. J'utilise beaucoup les dictionnaires et collections, je sais qu'il y en a d'autre comme list(of) que j'ai utilisé pour des classes serialisable pour faire du XML, Mais j’avoue que je mis suis pas trop penchez dessus.
Je m’était cotonné au tableau de string pour avoir l'information en mode édition sur mon objet graphique, mais à vrai dire pour le texte j'en ai pas besoin en édition, d'ailleurs je lui est mis les mêmes textes que dans le constructeur de mon objet graphique MiltiRoundLabel. Je pourrais passer par une simple méthode. Mais cela m'a appris quelques chose.
En tout cas merci beaucoup pour ces explications clair, et je vais regarder ce observablecollection cela m'intrigue.