User defined type

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 13 août 2010 à 16:19
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 16 août 2010 à 16:48
Salut à tous

Dans un module j'ai defini
Public Type dataname
name As String
SurName As String
Othername As String
End Type

Le problème est si je veux utiliser dataname
dans une class comme parametre à une methode
ex
Public sub mymethode(Namesdetails As dataname)
je reçois une erreur

only public user defined types in public object modules can be used as parameter
Merci

19 réponses

NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
13 août 2010 à 16:44
Remplace Public par Private pour le Type
et la Sub
...
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 août 2010 à 16:47
Mauvaise idée : colle les définitions de types (et de constantes qui y sont relatives) ainsi que les fonctions qui prennent un de ces types en paramètre ou le retourne dans un module.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
13 août 2010 à 16:49
oups!!My bad!!
Remplace Public par Private uniquement pour ta Sub...

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
13 août 2010 à 18:01
@NSUADI : Marchera pas non plus à cause du type. Ma réponse est bonne, cherche pas

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0

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

Posez votre question
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
13 août 2010 à 18:27
@ghuysmans99:Désolé de te contredire,tu es sûrement mieux calé que moi en vb6 mais je l'ai sous le nez et ça marche...
'Dans le module
Public Type dataname
name As String
SurName As String
Othername As String
End Type

'Dans la classe
Private Sub mymethode(Namesdetails As dataname)
End Sub

En tous cas,l'erreur est levé...ou bien je ne comprends pas trop bien?

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2010 à 00:54
T'as une erreur parce que t'as défini un type public dans une classe (mais aussi un form et un usercontrol). En résumé, tu ne peux pas exposer publiquement une méthode ou une propriété d'un type défini par l'utilisateur dans une classe VB6.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
14 août 2010 à 01:03
si je te comprends bien,on ne peut pas déclarer un type défini par l'utilisateur comme étant 'Public'?

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2010 à 01:06
On le peut seulement dans un module ... En tous cas c'est comme ça en VB6, pour du VB.NET j'en sais rien.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
14 août 2010 à 01:16
Mais justement je parlais de le définir(Type) dans un module et non dans une classe...je l'ai même précisé en commentaire dans le code:
ici en grand et en bleu

'Dans le module

Public Type dataname
name As String
SurName As String
Othername As String
End Type


Dans ce cas,on est totalement d'accord...
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2010 à 03:03
Oui mais si tu l'utilises dans une fonction publique d'une classe, d'un form ou d'un usercontrol comme type de paramètre ou de retour, ça marchera pas.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
14 août 2010 à 03:20
une fois de plus,c'est ce que j'ai mentionné...

'Dans la classe
Private
Sub mymethode(Namesdetails As dataname)
End Sub



Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 août 2010 à 03:25
C'est bizarre maintenant qu'il est en grand et gras je le vois . Mon petit neurone fatigue, là ... Mais pas tout à fait : si la structure n'agit que sur la structure et pas sur autre chose, vaudrait mieux la mettre dans le module où est définie la structure.

Evidemment si c'est pour usage interne uniquement, tu mets tout en private et ça va aller

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
14 août 2010 à 03:35
Tout à fait d'accord!!
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2010 à 09:59
Salut à tous

Bien sur si tu définis ta methode comme private
ça marche
mais si tu la besoin comme public alors
donc faire comme a dit guysmans99
mais pas toujours le module convient
ou soi annulé le type
Public
name As String
SurName As String
Othername As String
End Type
et écrire la methode ainsi
Private Sub mymethode(name as string,surname as string,othername as string)

en net pas de problème
dans un module
Public Structure namesdata
Public familly As String
Public surname As String
Public othername As String
End Structure

dans une class


Public Sub test(Byval nnn As namesdata)

End Sub
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
15 août 2010 à 18:49
@ShayW:
en net pas de problème
...Pas d'accord!!

Sur .net,c'est également le même problème la sub doit être déclaré Private sinon si c'est Public tu as le message d'erreur suivant:
"'nnn' ne peut pas exposer le type 'Module1.namesdata' en dehors du projet via class 'Form1'."

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2010 à 23:06
Bonsoir
Je maintiens toujours qu'en net (vb2008)
pas de problème
j'ai evidemment testé sinon je n'aurais pas dit

dans un module
Public Structure namedata
    Public family As String
    Public surname As String
    Public othername As String
End Structure


dans une class
 Public Class Sevenseg
    Public Sub shownames(ByVal mynames As namedata)
        MsgBox(mynames.family & mynames.surname & mynames.othername)
    End Sub


aucune erreurs de compilation
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
15 août 2010 à 23:51
Moi également je persiste et signe:
"'mynames' ne peut pas exposer le type 'Module1.namesdata' en dehors du projet via class 'Form1'."
Module Module1
    Public Structure namedata
        Public family As String
        Public surname As String
        Public othername As String
    End Structure

End Module


Dans la classe Form1
Public Class Form1
    Public Sub shownames(ByVal mynames As namedata)
        MsgBox(mynames.family & mynames.surname & mynames.othername)
    End Sub
End Class


Tu peux aussi voir l'image...Bizarre

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 août 2010 à 12:37
Salut
J'ai bien vu le namedata souligné
bizarre
enfin après avoir cherché j'ai trouvé
Tu as écrit
 Module Module1
    Public Structure namedata
        Public family As String
        Public surname As String
        Public othername As String
    End Structure
End Module


c.a.d la structure namedata est definie dans la déclaration du module


moi je l'ai défini en dehors du module
Public Structure namedata
    Public family As String
    Public surname As String
    Public othername As String
End Structure
Module Module1

End Module



et en fait je ne suis pas obligé de declarer
namedata dans un module mais aussi dans une class en dehors de sa déclaration
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
16 août 2010 à 16:48
C'est bon,ça y est!!
Maintenant,on est sur la même longueur d'onde...

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
Rejoignez-nous