Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Classi e parametri: come passare oggetti?

Buon giorno a tutti!
Ho fatto alcune ricerce in Google ed ho trovato alcune cose molto utili, ma
non precisamente quello che carcavo....
mi spiego meglio: sto cominciando a studiarmi le Classi VB e ho subito avuto
voglia di provare a farne una semplice semplice: la mia classe dovrà
selezionare il testo in una textbox ogni volta che la textbox riceverà il
focus dall'applicazione.Bene, la mia classe dovrà avere 2 proprietà: il nome
del controllo textbox in focus e il nome della maschera che ospita il
controllo. Il codice che uso è il seguente:
in modulo di classe
Option Explicit
Private mvarcnome As String 'Copia locale.
Private mvarcmaschera As String 'Copia locale.
Public Property Let cmaschera(ByVal vData As String)
    mvarcmaschera = vData
End Property
Public Property Get cmaschera() As String
    cmaschera = mvarcmaschera
End Property
Public Property Let cnome(ByVal vData As String)
    mvarcnome = vData
End Property
Public Property Get cnome() As String
    cnome = mvarcnome
End Property
Public sub sel_txt()'pensavo di definire all'interno sella sub una variabile
as object e utilizzare quella....ma mi da errore
dim obj as object
set obj=new object
    'dovrebbe essere
    maschera.obj.sellenght=len (maschera.obj.text)
end sub
il problema è che non so come gestire la sub....  :-((
1) E' necessario passare alla sub dei parametri dal modulo chiamante(nome
controllo e nome form)?
2) se non è necessario come faccio a dire alla sub nel modulo di classe:"Il
textbox che ci interessa è: TEXTBOX1"?
3) E' possibile passare come variabili ad una sub, un oggetto (esempio:
recordset, label, altra classe)?
Grazie 1000 a tutti!
Ciao
Alex
in modulo programma

 focus dall'applicazione.
Quando si dice la combinazione, ho appena scritto un messaggio che spiega
(in teoria) come fare questa cosa con la clausola WithEvents.
In pratica nella tua classe (chiamiamola ClsEsempio) fai così:
Option Explicit
Dim WithEvents TxtBox  As TextBox
Public Property Set TxtBoxDaUsare(t As TextBox)
   Set TxtBox = t
End Property
Private Sub TxtBox_Change()
   TxtBox.SelStart = 0
   TxtBox.SelLength = Len(TxtBox.Text & "")
End Sub
Mentre nella tua form, inserisci un textbox Text1 e copia questo codice:
Option Explicit
Dim MiaClsEsempio  As ClsEsempio
Private Sub Form_Load()
   Set MiaClsEsempio = New ClsEsempio
   Set MiaClsEsempio.TxtBoxDaUsare = Text1
End Sub
Eqquequa!
Ciao
*Roby*

 *Roby*
Grazie! sei stato moooolto gentile....e veloce!!
Alex

 Grazie! sei stato moooolto gentile....e veloce!!
Figurati, passavo di qui...
Ciao
*Roby*

 controllo di tipo TextBox.
Quindi per ogni textbox dovrei, in fase di chiamata sulla form, avere una
cosa del genere:
Dim miaclasseesempio() as clsesempio
private sub form_load()
    for each controllo in miaclasseesempio
        set miaclasseesempio()=new ClsEsempio
        set miaclasseesempio().txtboxdausare=text(i)
        i=i+1
    next controllo
end sub
Sbaglio quaccheccosa??
Grazie!
Alex

 end sub
direi qualcosa tipo
dim i as integer
dim miaclasse() as clsEsempio
for each control in me.controls
    if typeof control is textbox then
         redim preserve miaclasse(i) '--l'array viene incrementato
preservando il suo contenuto
         set miaclasse(i)=new ClsEsempio
         set miaclasse(i).txtboxdausare= control
         i = i + 1
    end if
end if

 Sbaglio quaccheccosa??
Si, ma (per quanto possa sembrare incredibile) sei stato già corretto da un
Fustino di Dixan.
Vorrei solo aggiungere che ti dovresti ricordare di fare un po' di pulizia
quando chiudi la form.
Setta a Nothing tutte le istanze di classi che hai inizializzato, e crea
nella tua classe il distruttore di classe (Class_Terminate) nel quale devi
ripulire la variabile oggetto TxtBox, forzando anch'essa a Nothing.
E con ciò sei sicuro di non lasciare in giro cadaveri che impegnerebbero
risorse; questo perchè "nulla fu mai più spaventoso di un cadavere che
risorse" (Brrr!!! ;-D)
Ciao
*Roby*

 Fustino di Dixan.
sono un detersivo fustoso ;) che sia incredibile che sappia qualcosa è vero.

 end if
Giusto per pignoleria, in genere (ma e' anche questione di gusti) una
collection e' piu' "naturale" quando tratti un insieme di oggetti, nel caso
specifico ti evita anche di preoccuparti del ridimensionamento dell'array:
dim clTextBoxes As Collection
dim miaclasse as clsEsempio
Set clTextBoxes = New Collection
for each control in me.controls
    if typeof control is textbox then
        set miaclasse=new ClsEsempio
        set miaclasse.txtboxdausare= control
        clTextBoxes.Add miaclasse
    end if
end if
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 collection e' piu' "naturale" quando tratti un insieme di oggetti, nel
caso ...

 + naturale ma meno veloce....
Dipende...
in fase di caricamento, una collection senza chiave e' persino piu' veloce,
confronta per esempio:
For i = 0 To 20000
    ReDim Preserve arTest(i)
    Set arTest(i) = New Class1
Next
con
Set clTest = New Collection
For i = 0 To 20000
    Set c = New Class1
    clTest.Add c
Next
aggiungendo una chiave al metodo .Add le prestazioni calano su un numero di
oggetti dell'ordine di grandezza usato sopra, ma guadagni in funzionalita'
rispetto all'array... diciamo che e' questione di gusti *E* di applicazione
pratica


Grazie 1000 a tutti!
Adesso studio e provo.....
Alex

 wrote in message
mQE08.1503$Gy1....@news1.tin.it...


 wrote in message
ORh18.106$7m1....@twister1.libero.it...
