PB proprieté du type structure

Résolu
cs_mavrick2b Messages postés 8 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 31 mars 2006 - 30 mars 2006 à 16:36
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 3 avril 2006 à 13:29
Bonjour,

J'ai crée une proprieté dans une classe qui a pour type une tructure,
mais il m'est impossible de d'acceder à l'interieur de la structure par le biais de ma propriete.

Alors si qqun a une idée

Merci

Structure StructCondition
Dim Toto As Double
Dim Titi As Double
Dim Nb As Integer
Dim Text As String
End Structure

Dim Cond As StructCondition

Public Property Conditions() As StructCondition
Get
Return Cond
End Get
Set(ByVal Value As Cond_IDSS_TEK370)
Cond = Value
End Set
End Property

16 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 mars 2006 à 16:38
Bonjour

Je l'ai aussi constaté, et je ne connais aucune solution autre que d'enregistrer la structure dans une variable locale et de la réassigner après.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
1 avril 2006 à 00:57
Salut mavrick, salut NHenry,

Je ne sais pas si cela peut vous aider, mais en VB6, un comportement similaire existait déjà, avec les Types (structures de l'époque).

Je sais que VB.Net est moins permissif que VB6, et notamment au niveau des facilités d'écritures, et de déclarations.
J'emets donc une hypothèse, soit ta Structure est privée (tu n'as rien spécifié sa visibilité, et je ne connais pas sa portée), soit ta Classe n'est pas publique. Et je postule que cette hypothèse peut avoir son importance :

En effet, dans VB6, on ne peut déclarer un Type dans une Classe privée que s'il est lui-même privé à cette Classe. Et s'il est privé, la Classe ne peut l'exposer dans aucune de ses propriétés! Ni même l'affecter à un argument de fonction ou de procédure!
C'est logique, c'est un membre protégé de la Classe.

On peut aussi déclarer un Type public dans un module Standard de VB6, mais il n'est pas accessible à une Classe privée, donc il ne peut pas passer par ses propriété (même déguisé en Variant), et encore moins par ses arguments.

Par contre, toujours dans VB6, on peut déclarer un Type public dans une Classe publique (MSDN dit souvent un module d'objet public, source d'incompréhensions). Puisqu'il est public, la Classe peut l'exposer dans ses propriétés, et le passer à travers des arguments de fonctions ou de procédures!

En conclusion, je pense que soit ta Structure est privée dans sa Classe, soit ta Classe n'est pas publique.

Mais je peux encore me tromper (les MVP trancheront peut-être)

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
1 avril 2006 à 08:26
Bonjour

Non, car i tu remplace structure pas class (avec un constructeur par défaut), tout fonctionne correctement, tout simplement, VB refuse cette opération.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
1 avril 2006 à 14:30
Salut NHenry,

j'avoue que je ne comprends pas ta remarque :
"Non, car i tu remplace structure pas class ", cela valide le fait qu'une Classe est, au moins, un Type, non, puisqu'elle peut en prendre la place? (mais, cela valide aussi qu'un Type n'est pas une Classe [un Type au sens Structure, sans opérateur]).

Par contre, pour éviter d'en débattre des heures (ça me plairait autant qu'à toi), dis-moi, s'il te plait, quelle est cette opération que VB semble refuser "tout simplement, VB refuse cette opération" (j'ai peur de ne comprendre, si ça se trouve, je suis complètement à côté!) ?.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 avril 2006 à 08:01
Bonjour

Je reformule :
Si tu remplace ta structure par une classe, il n'y a plus de pb.
VB autorise à modifier les attributs d'une classe, mais pour faire pareil avec les structures, il faut mémoriser ta structure en local (à ta méthode) et ensuite la réécrire.

Une classe peut prendre la place d'un type sans pb, mais l'inverse est moins probable car il y a un problème d'accès (voir qqs lignes plus haut).

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 10:04
Salut NHenry,

je comprend mieux ce que tu veux dire comme ça :)
Par contre, il existe bien des limitations au niveau de la publication (de l'exposition) des Types, mais leur publication n'est pas impossible ! Du tout !

Appuies sur [F2], regardes le module OLE, tu verras qu'il publie des Types. Tu peux aussi le faire avec VB. Et, qui dit publication possible des Types, dit que tu peux les passer par des propriétés ou des méthodes. Il suffit pour cela que les Types soient déclarés publics dans des classes publiques.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 avril 2006 à 10:14
Bonjour

En VB.NET, les structures sont aussi visibles que les classes (mme règles quoi).
De fait, les DLL ne sont pas des OLE, mais de blibliothèques de classes .NET, tout peut-être publier.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 10:19
D'accord,

en fait OLE, c'était juste pour l'exemple (la preuve). En VB aussi tu peux tout publier. Par contre, à ton avis (à part les problème de nom de type de ses déclarations d'argument), d'où vient son problème, et pourquoi lui conseilles-tu d'en faire une classe, si tout peut être publié en VB.Net?


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 avril 2006 à 12:26
Bonjour

Car si tu fais une classe, tu peux accéder au membres de celle-ci sans devoir la récupérer en local.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 12:48
L'avantage avec toi, c'est que tu n'en écris pas beaucoup pour étayer tes assertions. L'inconvénient, c'est que c'est plus facile de ne pas comprendre, et surtout, de penser que tu te trompes (à tort sûrement).

Tu me dis "En VB.NET, les structures sont aussi visibles que les classes (mme règles quoi)", donc on peut accéder aux Structures d'une Classe aussi facilement qu'à une Classe.

Mais avant, tu dis "Une classe peut prendre la place d'un type sans pb, mais l'inverse est moins probable car il y a un problème d'accès (voir qqs lignes plus haut)", donc on ne peut pas accéder aux Structures d'une Classe aussi facilement qu'à une Classe.

Je reste dans le doute, et je verrais par moi-même quand je ferais du .Net! C'est dommage, tu as l'air de t'y connaitre, et j'aurais aimé que tu expliques.

Enfin, quand tu dis "Car si tu fais une classe, tu peux accéder au membres de celle-ci sans devoir la récupérer en local", je ne vois pas ce que tu veux dire.
Dans son exemple, sa Structure StructCondition appartient à sa Classe Conditions. Tu proposes de faire une nouvelle Classe StructCondition, avec un membre dans la Classe Conditions référencant la nouvelle Classe? ou une Classe StructCondition GlobalMultiUSe (ou son équivalent en .Net)?

PS: si tu n'as pas le temps, ne te prends pas la tête à répondre.
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
cs_mavrick2b Messages postés 8 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 31 mars 2006
3 avril 2006 à 12:52
Pour pouvoir acceder à cette structure j'ai simplement crée une structure du même type que la structure que j'avais déclarer précedement. Et du fait que je ne puisse pas affecter les differents objets de ma structure j'affecte la structure complette.

Dim Struc As New MaClasse.StructCond

Struc.VDS = 500
Struc.IDSSmax = 0.000001
Struc.ColPwr = 0
Struc.EndColPwr = 100
Struc.PkPower = 0.4
Struc.Polarity = "PLE"
Struc.TEKaddress = 16
Struc.TextOnScreen = "MESURE IDSS"
Struc.BoardNb = 0

MaClasse.Conditions = Struc

Et là ca marche.
0
cs_mavrick2b Messages postés 8 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 31 mars 2006
3 avril 2006 à 12:55
Remaque : Les objets de ma structure "je sais!" ne corhespondent pas à ceux de ma question mais c'est pour la forme.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 12:58
Salut mavrick2b,

ben, écoutes... royal!
et MaClasse.Conditions est de type MaClasse.StructCond? ou y-t-il toujours une structure privée dans MaClasse, et VB.Net s'occuperait de tout bien ranger?

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 avril 2006 à 13:02
Bonjour

Pour exemple :

ltTab : ArrayList (mais fonctionne pour les propriétés de manière identique)

'Considéré comme covertit avec CType
ltTab(0).Champ=Value

n'est possible que si l'objet d'index 0 est une classe, car si c'est une structure, tu ne pourais pas, il faudrais faire :

Dim lVar as MaStructure
lVar=ltTab(0)
lVar.Champ=Value
ltTab(0)=lVar

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
cs_mavrick2b Messages postés 8 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 31 mars 2006
3 avril 2006 à 13:10
Oui mais c'est implicite : MaClasse.Conditions c'est la structure que je n'arrivait pas a ecrire. elle est effectivement de type MaClasse.StructCond tout comme la nouvelle classe construite : Struc

J'espere c'est clair.?
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 13:29
ah yes,
pipo-bimbo (peu d'écrits, mais effet monstre)

c'est marrant, en VB6, si mon Type StructCond (structure dans ma Classe) est public (et donc ma Classe aussi), je peux écrire :

Dim LocalStruc As MaClasse.StructCond' type public dans ma classe
Dim InstanceDeMaClasse As New MaClasse' ma classe

LocalStruc.VDS = 500
...
LocalStruc.BoardNb = 0

InstanceDeMaClasse.Conditions = LocalStruc ' affectation d'un type dans un autre

et InstanceDeMaClasse.Conditions est de type MaClasse.StructCond' donc le type public

et cela fonctionne parfaitement!


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
Rejoignez-nous