Newsgroup: it.comp.lang.visual-basic
Titolo: Come passare a Property Let più parametri

Sembra incredibile, ma non riesco a passare a Property Let piů di
un parametro alla volta...
Public Property Let  nomeProprietŕ (Parametro1 As Integer,
Parametro2 As Integer)
e fin qui...
Quando perň cerco di settare la proprietŕ mi salta fuori di tutto
(diversi messaggi di errore incomprensibili)
IstanzaClasse.nomeProprietŕ  = Parametro1, Parametro2
IstanzaClasse.nomeProprietŕ  (Parametro1, Parametro2)
Il primo da un errore di sintassi, il secondo un errore
incomprensibile (da me almeno) di runtime... boh!
Ho cercato su MSDN, ma non ho ricavato piů di quanto dica l'Help
standard (cioč niente).

 IstanzaClasse.nomeProprietà  (Parametro1, Parametro2)
IstanzaClasse.nomeProprietà(Parametro1, Parametro2) = NuovoValore
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.19. C, C++ and ASM developers
                              and beta testers are welcome!

> IstanzaClasse.nomeProprietà(Parametro1, Parametro2) =
NuovoValore
Hai ragione... così funziona, comunque che razza di sintassi, la
prima parte sembra una matrice, inoltre vorrei proprio saperla la
differenza pratica tra "Parametro passato" e "Nuovo valore".

 prima parte sembra una matrice,
[SNIP]
Infatti somiglia a una matrice perche' una routine property, come dice la
parola stessa, serve sostanzialmente a impostare *UN* valore in *UNA*
proprieta'
Aggiungere piu' di un parametro in genere serve appunto a creare una
property indicizzata, che quindi emula il comportamento di una matrice...
per esempio il comune
List1.List(i) = "Ciao"
Nota che nel messaggio di prima c'e' un piccolo errore nel prototipo della
routine, che deve essere cosi':
Public Property Let nomeProprietà (Parametro1
As Integer, Parametro2 As Integer,NuovoValore As Integer)
dove *l'ultimo* (non il primo come indicato in precedenza) parametro
conterra' quello che compare a destra dell'uguale in fase di assegnazione
IstanzaClasse.nomeProprietà(Parametro1, Parametro2) =  NuovoValore
La differenza pratica tra "ParametroX" e "NuovoValore" e' che sei
formalmente tenuto a memorizzare il valore contenuto in quest'ultimo campo,
che e' appunto quello che ti e' stato assegnato nella chiamata; in teoria
potresti anche usare uno qualunque degli altri parametri, ma sarebbe un
utilizzo veramente sconsiderato e al limite del penale ;-) oltre che una
fonte di errori non comune (prova a dare in mano a qualcun'altro una classe
cosi' e senti le bestemmie!)
In linea di massima quindi, se la tua proprieta' non deve somigliare
concettualmente ad una matrice, sarebbe piu' indicato usare nella classe un
semplice metodo (quindi una normale Sub o Function pubblica) per passare
valori multipli.... come hai notato tu stesso la sintassi della property
applicata al tuo caso risulta un po' innaturale.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 applicata al tuo caso risulta un po' innaturale.
Eh, ci ho provato eccome...
Il fatto è che la Classe viene istanziata dal codice del Form,
mentre il metodo lo devo richiamare da un modulo standard, e,
anche passandogli il riferimento della classe istanziata, non c'è
niente da fare, cioè il metodo, quando viene richiamato dal
modulo, non mi funziona (a meno di creare un'altra istanza della
classe).
Invece le proprietà riesco a settarle anche dal modulo, per cui
sono obbligato a far così :-(

 ha scritto nel messaggio
news:RCEu8.40012$m41.1...@twister2.libero.it...

Una routine property pubblica e' sempre una routine, con qualche "gingillo"
in piu' ma del tutto equivalente ad un metodo pubblico, quindi devono
funzionare ambedue allo stesso modo; se davvero hai riscontrato questo
comportamento il problema e' sicuramente altrove...


 comportamento il problema e' sicuramente altrove...
Infatti la property funziona bene, č il metodo che non funziona
altrettanto bene.

 ha scritto nel messaggio
news:TfXu8.43399$SR5.1...@twister1.libero.it...

Quello che volevo dire e' che non e' pensabile che la property funzioni e il
metodo no... il fatto aver usato una property probilmente ti ha fatto
aggirare inconsapevolmente qualche altro problema di codice, ma non e' la
soluzione (perlomeno non quella reale)


 soluzione (perlomeno non quella reale)
E' possibile, ma...
1. Creo un Form
2. Creo un modulo di classe "Classe1"
3. Aggiungo una proprietà a "Classe1"
4. Aggiungo un metodo a "Classe1"
5. Istanzio la classe dal codice del form (set Riferimento = New
Classe1)
6. Creo un modulo standard.
7. In una routine del modulo standard alla property della classe
si può accedere, al metodo no (almeno io non ci riesco in nessun
modo)
Se tu ci riesci... fammi sapere come fai che mi interessa sul
serio.

 ha scritto nel messaggio
news:x23v8.49031$m41.1...@twister2.libero.it...

Beh, spero di non essere l'unico a riuscirci ;-)
Il metodo e' definito correttamente come Public?
In ogni caso: in fondo trovi il codice di una classe di esempio, con un
metodo e una property che eseguono esattamente la stessa cosa, con le
sintassi relative e piu' di un parametro come nel tuo esempio...
in un form e' stato aggiunto:
Dim C1 As Class1
Set C1 = New Class1
ModuleTest C1
in un modulo bas:
Public Sub ModuleTest(c As Class1)
With c
    .TestProp(0) = "Test della property"
    .TestMethodLet 1, "Test del metodo"
    Debug.Print .TestProp(0)
    Debug.Print .TestMethodGet(1)
End With
End Sub
ecco la classe "Class1" completa
Option Explicit
Private arTest(9) As String
Public Sub TestMethodLet(ByVal intIndex As Integer, ByVal strValue As
String)
'NB: per brevita' mancano tutti i controlli di errore
arTest(intIndex) = strValue
End If
End Sub
Public Function TestMethodGet(ByVal intIndex As Integer) As String
TestMethodGet = arTest(intIndex)
End Function
Public Property Get TestProp(ByVal intIndex As Integer) As String
TestProp = arTest(intIndex)
End Property
Public Property Let TestProp(ByVal intIndex As Integer, ByVal strValue As
String)
arTest(intIndex) = strValue
End Property
questo e' tutto, e *deve* funzionare... prova a confrontare con il tuo
codice per vedere se trovi l'inghippo


 codice per vedere se trovi l'inghippo
E infatti funziona... adesso cerco l'inghippo :-)