Newsgroup: it.comp.lang.visual-basic
Titolo: Alle prime armi...

Per provare l'uso delle Classi ho fatto un programma semplicissimo che mi fa
una somma; da una form inserisco in due textbox due numeri e in una terza
textbox ci finirà il risultato. Per fare la somma ci sono due tasti uno per
farla direttamente dentro il modulo principale e funziona mentre l'altro
serve per usare la classe e non funziona.
Quando provo a fare la somma con la Classe mi da un errore: "Invalid use of
property".
quando richiamo la proprietà operazione della classe dopo dovrei scrivere i
due parametri ma nell'etichetta che viene sotto mentre stai scrivendo mi die
di inserirne uno ma in realtà all'interno della classe di parametri ne
richiedo due, ho provato a modificare la classe e richiederne tre e allora
l'etichetta mentre scrivo nel modulo principale mi dice di inserirne due.
Nono sono riuscito a capire dove sia l'errore, qui di seguito metto le
istruzioni che ho scritto se qualcuno sa dirmi qualcosa mi fa un favore
MODULO PRINCIPALE
*******************************
Dim x, y, result As Integer
Dim addizione As Somma
-----------------------------------------
Private Sub cmdClasse_Click()
    Set addizione = New Somma
    x = CInt(txtAdd1.Text)
    y = CInt(txtAdd2.Text)
    addizione.operazione x, y
    result = addizione.risultato
    txtRisultato.Text = result
End Sub
-----------------------------------------
Private Sub cmdDiretto_Click()
    x = CInt(txtAdd1.Text)
    y = CInt(txtAdd2.Text)
    result = x + y
    txtRisultato.Text = result
End Sub
*******************************
CLASSE
*******************************
Option Explicit
Private m_risultato As Integer
-----------------------------------------
Property Get risultato() As Integer
    risultato = m_risultato
End Property
-----------------------------------------
Property Let operazione(ByVal add1 As Integer, ByVal add2 As Integer)
   m_risultato = add1 + add2
End Property
*******************************
--
Claudio P.
ICQ: 39052657

 End Property
Siamo sicuri che una routine property let possa avere due argomenti?
Fossi in te passerei a due property let separate i valori add1 e add2, poi
puoi creare una property get denominata risultato dove passi add1+add2.
L'ho buttata li.
Ciao.

 End Property

 Siamo sicuri che una routine property let possa avere due argomenti?
Si, puň, ma poi va chiamata cosě:
Oggetto.Operazione(Add1)=Add2
E' questo il motivo per cui a Claudio non funzionava il programma. In ogni
caso non č una sintassi molto chiara applicata al problema in questione.
Meglio seguire il metodo che hai proposto tu col tuo suggerimento.
Ciao
*Roby*

 property".
[SNIP]
Non e' tanto un problema di sintassi, quanto di struttura della classe; le
soluzioni che ti hanno fornito possono andare bene ma ti invito a
considerare meglio la questione:
Una Property e' una proprieta' (doh!); un valore da leggere e/o da scrivere
che viene mantenuto dalla classe fintanto che l'istanza e' valida.
'Risultato' puo' essere correttamente inteso come proprieta', ma
'Operazione' suona decisamente male... quello che vuoi fare tu e' invece un
Metodo, ovvero fare svolgere alcune operazioni (del codice in senso
generale) alla classe, passando i parametri necessari, e ottenere o meno un
valore come risultato.
Definire un metodo equivale semplicemente a definire una Sub o una Function
nel modulo di classe, ecco quindi che il tuo esempio diventa:
'CLASSE
'*******************************
Option Explicit
Private m_risultato As Integer
'-----------------------------------------
Property Get risultato() As Integer
    risultato = m_risultato
End Property
'-----------------------------------------
Sub operazione(ByVal add1 As Integer, ByVal add2 As Integer)
   m_risultato = add1 + add2
End Sub
e la chiamata rimane uguale
Nota comunque che non e' particolarmente "bello" nemmeno cosi', in quanto
sei obbligato a scrivere sempre due istruzioni per ottenere quello che ti
serve; meglio ancora e' fornire il risultato direttamente come risultato del
metodo, che diventa quindi una Function
'CLASSE
'*******************************
Option Explicit
Function operazione(ByVal add1 As Integer, ByVal add2 As Integer) As Integer
   'Nota: sarebbe piu' sicuro "As Long" perche' la somma di due interi
   'puo' eccedere la capacita di un intero, causando un overflow
   operazione = add1 + add2
End Sub
A questo punto chi chiama usa semplicemente
z = addizione.operazione(x, y)
Se credi, ma con questo sistema non e' piu' necessaria, puoi comunque
mantenere la property Risultato con annessa variabile privata, per poter
rileggere il risultato dell'ultima operazione senza rieseguirla
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Oggetto.Operazione(Add1)=Add2
Devo dire che si, č decisamente orrendo...
Ciao


CUT
Grazie a tutti per i consigli
Ho utilizzato una sub, mi sembrava il metodo più sensato anche perchè la
sintassi
Oggetto.Operazione(Add1)=Add2
è veramente orrenda e per niente intuitiva
