Newsgroup: it.comp.lang.visual-basic
Titolo: tipi definiti dall'utente e classi

Ho definito una matrice come nuovo tipo di dati 
	Private Type tabXX
   		 Value(20) As Byte
	End Type
all'interno di un modulo di classe.
In questo modulo vorrei definire una classe che contenga una var. del 
tipo "tabXX" (Private mTabXX  As tabXX) e ho quindi creato le
corrispondenti
property Get e Let.
Il compilatore mi dà un errore sia che dichiari "Private" o "Public"
il tipo tabXX. 
Il tipo di progetto è "Standard EXE"
come potrei ovviare a questo bloccaggio?
Grazie per ogni contributo
			ulisse
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


dichiara il tipo come public in un modulo BAS e non
nella classe
dovrebbe funzionare :)
HTH
by
r

 Il tipo di progetto č "Standard EXE"
[SNIP]
L'ultima riga e' la causa del tuo problema.
L'unico modo per poter utilizzare un tipo come membro pubblico di una classe
(la tua property) e' quello di definire il type come pubblico in un modulo
che sia
a) di classe (non BAS)
b) pubblico
Il punto e' che gli EXE Standard per definizione possono usare solo classi
private, e quindi la condizione b cade.
Soluzioni:
- Trasforma il progetto in ActiveX EXE
questa e' una soluzione a buon mercato, ma non e' proprio pulita e se
possibile eviterei solo per risolvere questo problema
- Non esporre tipi ma classi
ci sono pochi casi in cui l'utilizzo di un type e' strettamente necessario,
per lo piu' legati ad operazioni di I/O su file o a chiamate alle API
specifiche, per tutto il resto puoi fare le stesse cose e molte di piu' con
le classi.
- (Nel tuo caso specifico) Usare direttamente un array di byte
il tuo Type racchiude in realta' un unico array di byte, potresti farne a
meno facendo si che la property esponga non l'intero blocco, ma il singolo
elemento byte, tramite un indice parametrico; stai simulando a tutti gli
effetti una property di tipo array (altra cosa che non puoi esporre
direttamente in una classe)
Te la cavi con queste modifiche
Private mValue(20) As Byte
Public Property Get TabXX(ByVal Index As Long) As Byte
    TabXX = mValue(Index)
End Property
Public Property Let TabXX(ByVal Index As Long, NewValue As Byte)
    mValue(Index) = NewValue
End Property
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ciao
Grazie Luca per la risposta precisa e molto interessante
Quindi con progetti "Standard EXE" non č possibile utilizzare un tipo
definito dall'utente in una classe. L'idea era di utilizzare un array di
UDT come per es.
	Public Type loadDescr
       		new As Boolean
      		Value As Variant
	End Type
	Private Type tabLoadPar
     	  ParDescr(20) As loadDescr
	End Type
	Private mTabPar As tabLoadPar 'local copy
	Public Property Get TabPar(Index As Integer) As loadDescr 
         'ritorno un el. dell'array di tipo UDT
       		TabPar = mTabPar.ParDescr(Index)
	End Property    'Get TabPar
	Public Property Let TabPar(Index As Integer,
                                   ByRef parToLoad As loadDescr)
   		 mTabPar.ParDescr(Index) = parToLoad
	End Property  'Let TabPar
Si puo quindi esporre  classi i cui elementi sono del tipo definito in VB6
(integer,byte, long,single,string .....) o esiste un'altra possibilitą
sempre all'interno di "Standard EXE"?
Grazie per le  spiegazioni
		Ciao	ulisse


 sempre all'interno di "Standard EXE"?
Non che io sappia
