Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Oggetti melefici...un altra domanda

Salve,
domanda sugli oggetti...un altra volta :)
Ho un oggetto che mi
espone due metodi e tre proprietą, nell' oggetto c'č anche un form (l'
oggetto in questione č una dll) che viene chiamato dall' interno di uno dei
due meodi.
In questo form ci sono tre aree di testo che riempite
dovrebbero salvarsi nelle tre proprietą dell' oggetto. Il problema č che se
in questo form creo una nuova istanza non vado a scrivere nelle proprietą
dell' oggeto che ha veramente chiamato il form ma in un altro oggetto...in
pratica:
ho un form esterno (form1), qui dentro istanzio una variabile
come un oggetto (class1) e chiamo un merodo dell' oggetto. Questo metodo mi
chiama il form salvato nella dll (form2) e si aspetta che io riempo delle
aree di testo. Per far si che quello che scrivo in questa finestra (form2),
finisca nelle 3 proprietą dell' oggetto istanziato in form1, come faccio??
Mi era venuto in mente di passare (da form1) un istanza al metodo dell'
oggetto che chiamo, che poi a sua volta lo dava al form contentuo nella dll
(form2) per salvare quello che scrivevo nelle aree di testo ma...non ha
funzionato gran che bene la cosa :)) Come si risolve??
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it



 dell' oggeto che ha veramente chiamato il form ma in un altro oggetto..
[SNIP]
Se ho capito bene il problema allora sei gia' andato vicino alla soluzione; si
riduce tutto a due passaggi:
Crea una property pubblica in Form2, diciamo ObjParent As Class1 (o As Object se
la stessa form puo' essere usata da classi diverse).
Nel metodo della classe ti regoli piu' o meno cosi':
Dim frmF2 As Form2
'se la classe e' multiuse dobbiamo usare sempre una nuova istanza di form2
'per evitare che 2 istanze di classe diverse accedano allo stesso form...
set frmF2 = New Form2
Set frmF2.ObjParent = Me 'impostiamo il riferimento all'istanza corrente
frmF2.Show
A questo punto, all'interno di Form2, hai accesso all'istanza corretta della
classe; nella form chiamante, Form1, non hai bisogno di specificare nulla.
Ciao
--
Luca Dormio
luca....@tin.it


luca....@tin.it


 altro modo raggirando il problema, però mi interessa capire questa cosa.
[SNIP]
Nella classe:
Public Enum valFunzione
    fnOK = 1
    fnNO = 0
End Enum
Private m_str As String
Public Property Let Stringa(ByVal str As String)
    m_str = str
End Property
Public Property Get Stringa() As String
    Stringa = m_str
End Property
Public Function pippo() As valFunzione
    Dim frmF1 As Form1
    Set frmF1 = New Form1
    Set frmF1.ObjParent = Me 'aggiungi questo
    frmF1.Show vbModal
    If frmF1.Click = Cancel Then
        MsgBox ("Premuto cancel")
        Exit Function
    End If
    pippo = fnOK
    'MsgBox ("Premuto Ok - " & frmF1.StringaTxt) 'questo diventa
    MsgBox ("Premuto Ok - " & m_str)
End Function
Nella form:
Public Enum valClick
    Ok = 1
    Cancel = 0
End Enum
Private m_click As valClick
'Private strTxt As String ' via questo, che diventa:
Private m_ObjParent As Class1
Public Property Get Click() As valClick
    Click = m_click
End Property
Private Sub Command1_Click()
    m_click = Ok
    ObjParent.Stringa = Text1.Text
    Unload Me
End Sub
Private Sub Command2_Click()
    m_click = Cancel
    Unload Me
End Sub
'Public Property Get StringaTxt() As String ' via questo, che diventa:
Public Property Get ObjParent() As Class1
    Set ObjParent = m_ObjParent
End Property
Public Property Set ObjParent(ByVal NewObjParent As Class1)
    Set m_ObjParent = NewObjParent
End Property


Grazie mille per l' esempio/aiuto...ho capito!!!
Funziona pure :)) Avevo
pensato pure io a qualcosa di molto simile senza però mettere nel mio
codice questa riga:
Set frmF1.ObjParent = Me
Ecco perchè non mi
funzionava...è questa la riga che mi lega all' istanza del chiamante vero?
Saluti...
