Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
20 mars 2008 à 11:53
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
28 mars 2008 à 12:32
Bonjour ,
Je suis sure que cette question à déjà été posée mais je n'arrive pas à mettre la main sur le topic correspondant DZL (si vous avez un lient vers le topic se seras parfait comme réponse Merci par avance)
Je développe actuellement des classes à fin de faire évolué un programme déjà existant. Tout est presque terminer mais je voudrais maintenant pouvoir accéder au données contenue dans mes objets par porperty get et let (à fin de ne pas avoir à modifier l'ensemble du programme qui est TRES long, TRES vieux, et VRAIMENT pas lisible pas endroits).
Je défini une structure de données (dans un module, je vais sans doute la faire passé dans ma classe en public, mais on verra sa plus tard). J'ai dans ma classe un tableau basé sur cette structure. Je veut pouvoir lire et écrire dans ce dit tableau depuis l'extérieur de mon objet comme si ce tableau étais déclarer en public (sauf que je ne veut pas qu'on pusse mettre tout et n'importe quoi comme données donc je veut passé par get/let, la validation des données viendras plus tard).
Mon code (qui ne fonctionne pas) :
8<-----------------------------------------------------
'Ici à priori pas de problèmes
Friend Property Get DATA(ByVal Index As Integer) As S_DATA
DATA = V_Donnees(Index)
End Property
'Heeee la sa coince
Friend Property Let DATA(ByRef NewDATA As S_DATA)
V_Donnees(Index) = NewDATA
End Property
----------------------------------------------------->8
Forcément le compilo (VB6) me retourne une erreur :
8<-----------------------------------------------------
Compile error:
Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter
----------------------------------------------------->8
Je ne sait pas comment déclarer ma property let... L'index je le met ou??? (SVP ne me dite pas qu'il me faut un let par donnée dans ma structure, c'est une GROSSE structure)
En final je veut que mon objet fonctionne comme sa :
Avec le get (sa pas de problèmes sa fonctionne) :
Tata = ObjData.DATA(Index).Toto
Avec le let (c'est là que je coince) :
ObjData.DATA(Index).Toto = Tata
Sachant que Toto et Tata sont du type string par exemple
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 27 mars 2008 à 17:02
Ok ça j'avais compris (enfin je crois) mais c'est possible d'éviter de faire ça dans le code du bouton ?
Private Sub Command1_Click()
Dim t As New Class1
Dim Temp As S_Test
Temp = t.Test(0)
Temp.b = "Sa fonctionne"
t.Test(0) = Temp
MsgBox t.Test(0).b
End Sub
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 27 mars 2008 à 16:37
Heeeeeeeee en faite je remarque que sa ne fonctionne pas exactement comme je l'aurais voulut...
Je m'explique grâce à un exemple :
J'ai dans un module :
Public Type S_Test
a As Integer
b As String
End Type
Dans un module de classe :
Private V_Test(0 to 10) as S_Test
Private Sub Class_Initialize()
V_Test(0).b = "Ne fonctionne pas"
End Sub
Friend Property Get Test(ByVal Index As Integer) As S_Test
Test = V_Test(Index)
End Property
Friend Property Let Test(ByVal Index As Integer, ByRef NewTest As S_Test)
V_Test(Index) = NewTest
End Property
Dans une form (contenant un bouton nommé "Command1") :
Private Sub Command1_Click()
Dim t As New Class1
t.Test(0).b = "Sa fonctionne"
MsgBox t.Test(0).b
End Sub
Quand je clique sur le bouton de ma form un message box contenant "Ne fonctionne pas"....
Comment faire pour que sa m'affiche (pour mon exemple) "Sa fonctionne" ?
Amicalement
Pensez "Réponse acceptée"
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 27 mars 2008 à 16:51
Ce qui veut dire ????
Je suis obligé de faire des seteurs pour chaqu'une des variables de mon type ( C'est que j'en es pas mal quand même et que j'ai maintenant plusieurs classe fonctionnant de cette façon )
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 27 mars 2008 à 17:07
Parce qu'en faite je modifie un programme qui utilisais des tableaux de variables global. Et dans ce dit programme il y à BEAUCOUP d'accès au données (en gros j'en es pour un mois à mettre en place l'exemple de mon post précédant..... Et j'ai pas que sa à faire.... )
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 28 mars 2008 à 11:04
Bon je fait des testes depuis 9H00 et aucune des deux solution que tu m'a apporté ne me conviens . (Je réfléchie encore à comment faire autrement)
Les données sont lut dans des fichiers binaire et toute les données "chaine de caractère" sont donc formaté (or je ne peut pas déclarer une chaine de caractère formaté en public dans une classe... Merci Microsoft ).
De plus à plusieurs endroits du programme que je modifie, il y à des copies d'un index du tableau dans une variable, ou les valeurs seront modifiées, mais pas forcément ré-envoilé à ma classe (soit pas de sauvegarde systématique des modifications) or avec le passage par référence les modification de la variable n'impacteront tout seul à ma classe (à moins d'ajouté une fonction "copie" ou "clone", sa fait partie de mes réflections).
Pas si simple quoi...........
( Mais c'est pourtant pas si compliqué ce que je veut faire, £$%#& à la fin )
Je crois que je vais prendre la solution de copier mes données dans une variable local et une fois les modifications apportées, envoilé cette variable à mon objet (même si sa me fait chier et que sa vas prendre un temps fous à mettre en place j'expliquerais pourquoi mon projet prend du retard à ma hiérarchie a cause d'une connerie pareil.... Sa vas pas leur plaire . Mais pour l'instant je ne voie pas vraiment comment faire autrement).
VB6 et la gestion d'objet.... bà c'est pas si bien (et encore là, c'est juste un problème de geteur/seteur... Je ne parle pas des problèmes d'héritage ou autre polymorphisme, et j'oublie complètement la sur-définition.... Ce qui est quand même SUPER pratique)
Bon bà si je ne trouve rien d'autre je ferais avec....
En tout cas MERCI bien Renfield Amicalement
Pensez "Réponse acceptée"
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 28 mars 2008 à 11:27
Heeeeee je m'éloigne un peut du sujet mais sa reste fortement lié :
Tu m'a dit "[...]lequel te renvoie une COPIE de ton S_Test[...]"
Or dans certain cas mon programme fait des truc du genre de :
8<---------------
Me.Text1(0).Text = Test(0).a 'Ligne 1
Me.Text1(1).Text = Test(0).b 'Ligne 2
Me.Text1(2).Text = Test(0).c 'Ligne 3
...
--------------->8
Ce qui veut dire que dans ce cas là mon programme une fois compilé vas crée une copie de ma structure en ligne 1, récupérer la valeur de 'a' depuis cette copie, libérer la mémoire, puis faire de même avec 'b' la ligne 2 et 'c' la ligne 3.... Sa risque d'être sacrément lent comme façon de faire (à moins que je ne raconte des conneries , ce qui m'arrangerais bien en faite ). Pour ce genre de chose il vaudrais peut être mieux faire :
8<---------------
Dim Tempon as S_Test
Tempon = Test(0)
Me.Text1(0).Text = Tempon.a 'Ligne 1
Me.Text1(1).Text = Tempon.b 'Ligne 2
Me.Text1(2).Text = Tempon.c 'Ligne 3
...
--------------->8
Quel est votre havie là dessus ?
Amicalement
Pensez "Réponse acceptée"