Newsgroup: it.comp.lang.visual-basic
Titolo: recuperare nome form

ragazzi volevo sapere come fare a recuperare il nome del form chiamante di 
un altro form in modo da gestirmi gli eventi nel form chiamato.. 

 
sei un po troppo parco di informazioni ;-)
quale VB usi?
cosa intendi per "gestire gli eventi"?
cosa intendi per "form chiamante"?
dovresti cortesemente allegare al post qualche riga di codice che aiuti 
a capire quello che vuoi realizzare.
bye
r

 capire quello che vuoi realizzare.
allora ho 1 form mdi con tante form child.. la mdi carica il form1.. il 
form1 con dal button1_click carica form2.. come faccio a recuperare il nome 
form? con quale istruzione?

 nome form? con quale istruzione?
E' un errore concettuale riferirsi al chiamante dal chiamato.
E un'altro errore è affidarsi al nome di un oggetto, specie se si parla di 
form.
Piuttosto riferisciti all'istanza dell'oggetto, ma questa sei tu che devi 
dirlo al tuo form.
Ciao

 
come ti hanno gia' detto non serve a molto riferisi al nome di un oggetto!
se tu spiegassi quello che vorresti fare, *forse*, un aiuto in piu' ti 
si potrebbe dare ;-)
bye
r

 ha scritto nel messaggio 
news:dpvoi2$1e2$1...@area.cu.mi.it...

in pratica ho dei form (gestione clienti,gestione articoli,gest. ecc....) 
che poi chiamano un form che ha una griglia che utilizzo per fare le 
ricerche.. per ora mi sono adattato così: ecco il codice :
NomeForm è una variabile globale che utilizzo nei form che poi mi permetto 
di identificare il form dove poi vanno caricati alcuni campi di testo..
Private Sub GRIGLIA_Click()
    If GRIGLIA.Rows > 2 Then
        NomeForm = txtNOMEFORM.Text
        Select Case NomeForm
            Case "articoli"
                With frmArticoli
                    Select Case sComandoInt2
                        Case "sfamiglia"
                            .txtSFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                            .txt_IDSFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                        Case "famiglia"
                            .txtFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                            .txt_IDFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                        Case "marca"
                            .txtMARCA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                            .txt_IDMARCA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                    End Select
                End With
            Case "sfamiglia"
                frmSottofamiglie.txtFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                frmSottofamiglie.txt_IDFAMIGLIA.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
            Case "telefonate"
                frmChiamate.txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                frmChiamate.txtRAGSOC.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
            Case "ric_reclami"
                frmRic_Reclami.txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                frmRic_Reclami.txtCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
            Case "interventi_suglia"
                frmINTERVENTI_s.txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                frmINTERVENTI_s.txtCOMUNE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 3)
                frmINTERVENTI_s.txtRAGSOC.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
            Case "reclami"
                frmReclami.txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                frmReclami.txtRAGSOC.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
            Case "fornitori"
                frmFornitori.txt_IDFORNITORE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                frmFornitori.txtRAGSOC.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                frmFornitori.CaricaRS
            Case "matricole"
                With frmMatricole
                    Select Case sComandoInt2
                        Case "cliente"
                            .txtCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                            .txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                        Case "articolo"
                            .txtARTICOLO.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                            .txt_IDARTICOLO.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                    End Select
                End With
            Case "interrogazioni"
                Select Case sComandoInt2
                    Case "interventi"
                        i = GRIGLIA.TextMatrix(GRIGLIA.RowSel, 2)
                        Load frmInterventi
                        frmInterventi.Show
                    Case "chiamate"
                        i = GRIGLIA.TextMatrix(GRIGLIA.RowSel, 2)
                        Load frmChiamate
                        frmChiamate.Show
                    Case "cliente1"
                        frmInterrogazioni.txt_IDCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
                        frmInterrogazioni.txtCLIENTE.Text = 
GRIGLIA.TextMatrix(GRIGLIA.RowSel, 0)
                End Select
        End Select
        Select Case sComandoInt2
            Case "interventi", "chiamate", "cliente1"
            Case Else
                Unload Me
        End Select
    End If
End Sub

 
[cut]
adesso ho capito!
stai facendo il contrario di quello che sarebbe logico, cioe':
non deve essere il "chiamato" a mettere a posto le cose nel "chiamante".
per fare quello che vuoi tu dovresi fare cosi':
nel form con la griglia di ricerca aggiungi un evento tipo:
======================
Public TipoGriglia As String ' Questa ti serve per decidere il tipo
                              ' di griglia da visualizzare
Public Event Selezione(Riga)
Private Sub GRIGLIA_Click()
     RaiseEvent Selezione(GRIGLIA.RowSel)
End Sub
======================
nei form chiamanti, es Articoli, fai cosi':
Private WithEvents Griglia As Form2
Private Sub Form_DblClick()
     Set Griglia = New Form2
     Griglia.TipoGriglia = "articoli"
     Griglia.Show
End Sub
Private Sub Griglia_Selezione(Riga As Variant)
    Select Case sComandoInt2
    Case "sfamiglia"
      txtSFAMIGLIA.Text = Griglia.GRIGLIA.TextMatrix(Riga, 0)
      txt_IDSFAMIGLIA.Text = Griglia.GRIGLIA.TextMatrix(Riga, 1)
      ....
    End Select
    Unload Griglia
    Set Griglia = Nothing
End Sub
=======================
bye
r

                            .txt_IDSFAMIGLIA.Text =
[snippone]
Aurgh!!!
Cos'è sto minestrone di if e select case?
Questo va contro tutte le regole di OOP e di mantenibilità del codice in 
generale.
Innanzitutto il chiamato non deve essere a conoscenza del contesto in cui 
opera.
SEMPRE, sia per i form che per le classi che per le funzioni.
Se non segui questa regola il rischio è che per toccare una virgola devi 
toccare 80 punti in modo che il tutto resti puntellato in perfetto 
equilibrio.
Ciao 

 SEMPRE, sia per i form che per le classi che per le funzioni.
quindi == ?????


 ha scritto nel messaggio 
news:dq0squ$2oe$1...@balena.cs.interbusiness.it...

Quindi ti stanno dicendo che una funzione E' una funzione!
Cosa significa?? (dirai tu!!)
Significa che ogni sezione di programma Sub/Function/Classe o qualunque 
altra cosa
è come una scatola nera nella quale entrano dei dati ed escono atri dati.
Quindi a prescindere dal contesto nel quale la «scatola» opera essa dovrà 
SEMPRE
produrre per un determinato Input un determinato Output.
Spero sia meglio detto così??
Ciao Bozu 

 Ciao Bozu
Ok.. mi creo una funzione parametrica.. è una cosa + pulita... 

 
scusa ma, cosa c'e' che non ti piace del codice che ti ho postato?

> per fare quello che vuoi tu dovresi fare cosi':
non ci siamo.. ecco il codice dei 2 form che prendo per esempio 
frmsottofamiglie e frmric_griglia
**********************************************************************
Ecco frmRic_Griglia:
Private Sub Form_Load()
    txtNOMEFORM.Text = NomeForm
    Left = 200
    Top = 100
    With GRIGLIA
        .Clear
        .Rows = 2
        Select Case txtNOMEFORM.Text
            Case "interventi"   'form generale di ricerca
                .Cols = 5
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.":
                .ColHeaderCaption(0, 1) = "STATO"
                .ColHeaderCaption(0, 2) = "ID"
                .ColHeaderCaption(0, 3) = "ARGOMENTO"
                .ColHeaderCaption(0, 4) = "DATA"
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                .ColWidth(2, 0) = 0
                .ColWidth(3, 0) = 5000
                .ColWidth(4, 0) = 1000
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        Aux = ""
                        Select Case RS("stato")
                            Case 0
                                Aux = "APERTO"
                            Case 1
                                Aux = "IN VISIONE"
                            Case 2
                                Aux = "CHIUSO"
                            Case 3
                                Aux = "CHIUSO PER INSUSSIST."
                        End Select
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & Aux & 
vbTab & RS("ID_intervento") & vbTab & RS("ARGOMENTO") & vbTab & 
RS("data_ini")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "chiamate"     'form generale di ricerca
                .Cols = 4
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.":
                .ColHeaderCaption(0, 1) = "STATO"
                .ColHeaderCaption(0, 2) = "ID"
                .ColHeaderCaption(0, 3) = "ARGOMENTO"
                .ColHeaderCaption(0, 4) = "DATA"
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                .ColWidth(2, 0) = 0
                .ColWidth(3, 0) = 5000
                .ColWidth(3, 0) = 1000
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        Aux = ""
                        Select Case RS("stato")
                            Case 0
                                Aux = "APERTO"
                            Case 1
                                Aux = "IN VISIONE"
                            Case 2
                                Aux = "CHIUSO"
                            Case 3
                                Aux = "CHIUSO PER INSUSSIST."
                        End Select
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & Aux & 
vbTab & RS("ID_CHIAMATA") & vbTab & RS("ARGOMENTO") & vbTab & RS("data_ini")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "telefonate"
                .Cols = 5
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO":
                .ColHeaderCaption(0, 3) = "COMUNE": .ColHeaderCaption(0, 4) 
= "TEL."
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 5000
                .ColWidth(4, 0) = 1000
                If IsNull(frmChiamate.txtRAGSOC.Text) = True Or 
frmChiamate.txtRAGSOC.Text = "" Then
                    SQL = "SELECT * FROM CLIENTI where id_azienda = " & 
frmMENU.cboAZIENDA.ComboIndex & " order by ragsoc"
                Else
                    SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmChiamate.txtRAGSOC.Text) & " OR indirizzo like " & 
Apici_Contiene(frmChiamate.txtRAGSOC.Text) & " or COMUNE like " & 
Apici_Contiene(frmChiamate.txtRAGSOC.Text) & ") AND id_azienda = " & 
frmMENU.cboAZIENDA.ComboIndex
                End If
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune") & vbTab & 
ControllaNull(RS("tel"))
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "sfamiglia"    'form sottofamiglie
                .Cols = 2
                .ColHeaderCaption(0, 0) = "DESCRIZIONE SFAM.": 
.ColHeaderCaption(0, 1) = "CODICE SFAM."
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                Set RS = ADOConn.Execute("SELECT * FROM FAMIGLIE")
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("descrizione")) & vbTab & 
RS("id_famiglia")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "famiglia"     'form famiglia
                .Cols = 2
                .ColHeaderCaption(0, 0) = "DESCRIZIONE FAM.": 
.ColHeaderCaption(0, 1) = "CODICE FAM."
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                Set RS = ADOConn.Execute("SELECT * FROM FAMIGLIE")
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("descrizione")) & vbTab & 
RS("id_famiglia")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "marca"        'form marche
                .Cols = 2
                .ColHeaderCaption(0, 0) = "DESCRIZIONE MARCA": 
.ColHeaderCaption(0, 1) = "CODICE MARCA"
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                Set RS = ADOConn.Execute("SELECT * FROM MARCHE")
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("descrizione")) & vbTab & 
RS("id_marca")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "articolo"     'form articoli
                .Cols = 2
                .ColHeaderCaption(0, 0) = "DESCRIZIONE ARTICOLO": 
.ColHeaderCaption(0, 1) = "CODICE ART."
                .ColWidth(0, 0) = 5000
                .ColWidth(1, 0) = 1500
                SQL = "SELECT * FROM ARTICOLI"
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("descrizione")) & vbTab & 
RS("id_articolo")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "fornitori"    'form fornitori
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_FORNITORE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                Set RS = ADOConn.Execute("SELECT 
ragsoc,comune,indirizzo,id_fornitore FROM FORNITORI ORDER BY RAGSOC")
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_fornitore") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "cliente1"     'form interrogazioni
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                If frmInterrogazioni.cboAZIENDA.Text = "" Or 
IsNull(frmInterrogazioni.cboAZIENDA.Text) = True Then
                    SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & " OR indirizzo like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & " or COMUNE like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & ")"
                Else
                    SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & " OR indirizzo like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & " or COMUNE like " & 
Apici_Contiene(frmInterrogazioni.txtCLIENTE.Text) & ") AND id_azienda = " & 
frmInterrogazioni.cboAZIENDA.ComboIndex
                End If
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "cliente2"     'form ricerca reclami
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmRic_Reclami.txtCLIENTE.Text) & " OR indirizzo like " & 
Apici_Contiene(frmRic_Reclami.txtCLIENTE.Text) & " or COMUNE like " & 
Apici_Contiene(frmRic_Reclami.txtCLIENTE.Text) & ") AND id_azienda = " & 
frmMENU.cboAZIENDA.ComboIndex
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
             Case "cliente3"     'form ricerca interventi suglia
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmINTERVENTI_s.txtRAGSOC.Text) & " OR indirizzo like " & 
Apici_Contiene(frmINTERVENTI_s.txtRAGSOC.Text) & " or COMUNE like " & 
Apici_Contiene(frmINTERVENTI_s.txtRAGSOC.Text) & ") AND id_azienda = 0"
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "reclami"      'form gest. reclami
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                SQL = "SELECT * FROM CLIENTI WHERE (ragsoc like " & 
Apici_Contiene(frmReclami.txtRAGSOC.Text) & " OR indirizzo like " & 
Apici_Contiene(frmReclami.txtRAGSOC.Text) & " or COMUNE like " & 
Apici_Contiene(frmReclami.txtRAGSOC.Text) & ") AND id_azienda = " & 
frmReclami.cboAZIENDA.ComboIndex
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            Case "cliente"      'form matricole clienti
                .Cols = 2
                .ColHeaderCaption(0, 0) = "RAGIONE SOC.": 
.ColHeaderCaption(0, 1) = "ID_CLIENTE"
                .ColHeaderCaption(0, 2) = "INDIRIZZO": .ColHeaderCaption(0, 
3) = "COMUNE"
                .ColWidth(0, 0) = 4000
                .ColWidth(1, 0) = 0
                .ColWidth(2, 0) = 2500
                .ColWidth(3, 0) = 2000
                SQL = "SELECT * FROM CLIENTI WHERE ragsoc like " & 
Apici_Contiene(frmMatricole.txtRic.Text) & " OR indirizzo like " & 
Apici_Contiene(frmMatricole.txtRic.Text) & " or COMUNE like " & 
Apici_Contiene(frmMatricole.txtRic.Text)
                Set RS = ADOConn.Execute(SQL)
                If Not RS.EOF Then
                    Do While Not RS.EOF
                        .AddItem ControllaNull(RS("ragsoc")) & vbTab & 
RS("id_cliente") & vbTab & RS("indirizzo") & vbTab & RS("comune")
                        RS.MoveNext
                    Loop
                End If
                RS.Close
            End Select
    End With
End Sub
Private Sub GRIGLIA_Click()
    If GRIGLIA.Rows > 2 Then
        NomeForm = txtNOMEFORM.Text
        Select Case NomeForm
            Case "articoli"
                With frmArticoli
                    Select Case sComandoInt2
                        Case "sfamiglia"


    End If
End Sub
*****************************************************************+
Ecco invece frmSottofamiglie (tenendo presente che la Select mi serve per 
far eseguire una query piuttosto ke un'altra e ke ogni form chiamante ha un 
numero di colonne diverse da altri...)
Private Sub TMS_BUTTON1_Click()
    sComandoInt2 = "famiglia"
    Load frmRic_GRIGLIA
    frmRic_GRIGLIA.Show
End Sub
Private Sub CaricaRS()
    sComandoInt = "modifica"
    If txt_IDSFAMIGLIA.Text = "" Or IsNull(txt_IDSFAMIGLIA.Text) = True Then
        MsgBox "Impossibile caricare il record corrente.", vbCritical + 
vbOKOnly, "Grave!"
        Exit Sub
    End If
    SQL = "SELECT FAMIGLIE.DESCRIZIONE AS FAM_DESC, SFAMIGLIE.ID_sFAMIGLIA, 
SFAMIGLIE.DESCRIZIONE, SFAMIGLIE.ID_FAMIGLIA FROM FAMIGLIE INNER JOIN 
SFAMIGLIE ON FAMIGLIE.ID_FAMIGLIA = SFAMIGLIE.ID_FAMIGLIA Where 
SFAMIGLIE.ID_sFAMIGLIA = " & txt_IDSFAMIGLIA.Text
    Set RS = ADOConn.Execute(SQL)
    If Not RS.EOF Then
        txtDESCRIZIONE.Text = ControllaNull(RS("DESCRIZIONE"))
        txtFAMIGLIA.Text = ControllaNull(RS("FAM_DESC"))
        txt_IDFAMIGLIA.Text = ControllaNull(RS("id_famiglia"))
        Toolbar.Buttons.Item(1).Enabled = True
        Toolbar.Buttons.Item(2).Enabled = True
        Toolbar.Buttons.Item(3).Enabled = False
        Toolbar.Buttons.Item(4).Enabled = False
        Toolbar.Buttons.Item(5).Enabled = True
        Toolbar.Buttons.Item(6).Enabled = True
    End If
    RS.Close
End Sub
Private Sub Form_Load()
    Left = 200
    Top = 100
    NomeForm = "sfamiglia"
    Abilita
    Toolbar.Buttons.Item(1).Enabled = False
    Toolbar.Buttons.Item(2).Enabled = False
    Toolbar.Buttons.Item(3).Enabled = True
    Toolbar.Buttons.Item(4).Enabled = True
    Toolbar.Buttons.Item(5).Enabled = False
    Toolbar.Buttons.Item(6).Enabled = False
    sComandoInt = "nuovo"
    SvuotaGriglia
    CaricaGriglia
End Sub
Private Sub Form_Activate()
    If NomeForm_OLD <> "" Then
        NomeForm_OLD = NomeForm
        NomeForm = "sfamiglia"
    Else
        NomeForm = "sfamiglia"
    End If
End Sub
Private Sub Form_Deactivate()
    If NomeForm <> "" Then
        NomeForm_OLD = NomeForm
    Else
        NomeForm = "sfamiglia"
    End If
End Sub
Private Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)
    Select Case LCase(Button.Key)
        Case "nuovo"
            sComandoInt = "nuovo"
            Abilita
            Toolbar.Buttons.Item(1).Enabled = False
            Toolbar.Buttons.Item(2).Enabled = False
            Toolbar.Buttons.Item(3).Enabled = True
            Toolbar.Buttons.Item(4).Enabled = True
            Toolbar.Buttons.Item(5).Enabled = False
            Toolbar.Buttons.Item(6).Enabled = False
            Svuota
        Case "modifica"
            sComandoInt = "modifica"
            Abilita
            Toolbar.Buttons.Item(1).Enabled = True
            Toolbar.Buttons.Item(2).Enabled = False
            Toolbar.Buttons.Item(3).Enabled = True
            Toolbar.Buttons.Item(4).Enabled = True
            Toolbar.Buttons.Item(5).Enabled = True
            Toolbar.Buttons.Item(6).Enabled = True
        Case "salva"
            If txt_IDFAMIGLIA.Text = "" Or IsNull(txt_IDFAMIGLIA.Text) = 
True Then
                MsgBox "Manca l'associazione della sottofamiglia con la 
famiglia. Inserire famiglia.", vbOKOnly + vbExclamation, "Attenzione!"
            End If
            SQL = ""
            On Error GoTo Errore
            ADOConn.BeginTrans
            Select Case sComandoInt
                Case "nuovo"
                    SQL = "INSERT INTO SFAMIGLIE (descrizione,id_famiglia) 
VALUES (" & Apici(txtDESCRIZIONE.Text) & "," & Apici(txt_IDFAMIGLIA.Text) & 
")"
                        ADOConn.Execute (SQL)
                        SQL = "SELECT Max(ID_SFAMIGLIA) AS MaxDiID_SFAMIGLIA 
From SFAMIGLIE"
                        Set RS = ADOConn.Execute(SQL)
                        If Not RS.EOF Then
                            txt_IDSFAMIGLIA.Text = RS("MaxDiID_SFAMIGLIA")
                        Else
                            GoTo Errore
                        End If
                        RS.Close
                Case "modifica"
                    SQL = "UPDATE SFAMIGLIE SET descrizione = " & 
Apici(txtDESCRIZIONE.Text) & ", id_famiglia = " & txt_IDFAMIGLIA.Text & " 
WHERE id_Sfamiglia = " & txt_IDSFAMIGLIA.Text
            End Select
            ADOConn.Execute (SQL)
            ADOConn.CommitTrans
            Toolbar.Buttons.Item(1).Enabled = True
            Toolbar.Buttons.Item(2).Enabled = True
            Toolbar.Buttons.Item(3).Enabled = False
            Toolbar.Buttons.Item(4).Enabled = False
            Toolbar.Buttons.Item(5).Enabled = True
            Toolbar.Buttons.Item(6).Enabled = True
            DisAbilita
            sComandoInt = ""
        Case "cancella"
            If MsgBox("Cancellare la famiglia?", vbCritical + vbYesNo, 
"Attenzione!") = vbYes Then
                SQL = "DELETE FROM sfamiglie WHERE id_sfamiglia=" & 
txt_IDSFAMIGLIA.Text
                ADOConn.Execute (SQL)
                Svuota
                DisAbilita
                txt_IDSFAMIGLIA.Text = ""
                Toolbar.Buttons.Item(1).Enabled = True
                Toolbar.Buttons.Item(2).Enabled = False
                Toolbar.Buttons.Item(3).Enabled = False
                Toolbar.Buttons.Item(4).Enabled = False
                Toolbar.Buttons.Item(5).Enabled = False
                Toolbar.Buttons.Item(6).Enabled = False
            End If
        Case "stampa"
            MsgBox "Non disponibile...", vbInformation + vbOKOnly, ";)"
        Case "annulla"
            DisAbilita
            Toolbar.Buttons.Item(1).Enabled = True
            Toolbar.Buttons.Item(2).Enabled = False
            Toolbar.Buttons.Item(3).Enabled = False
            Toolbar.Buttons.Item(4).Enabled = False
            Toolbar.Buttons.Item(5).Enabled = False
            Toolbar.Buttons.Item(6).Enabled = False
        End Select
    SvuotaGriglia
    CaricaGriglia
    Exit Sub
Errore:
    MsgBox "Errore in fase di salvataggio/recupero dati (" & Err.Description 
& ") - SQL= " & SQL, vbCritical + vbOKOnly, "Attenzione!"
    ADOConn.RollbackTrans
End Sub
Private Sub Svuota()
    txtDESCRIZIONE.Text = ""
    txtFAMIGLIA.Text = ""
    txt_IDFAMIGLIA.Text = ""
End Sub
Private Sub Abilita()
    txtFAMIGLIA.Enabled = True
    txtDESCRIZIONE.Enabled = True
End Sub
Private Sub DisAbilita()
    txtFAMIGLIA.Enabled = False
    txtDESCRIZIONE.Enabled = False
End Sub
Private Sub SvuotaGriglia()
    With Me.GRIGLIA
        .Clear
        .Rows = 2
        .Cols = 2
        .ColHeaderCaption(0, 0) = "DESCRIZIONE"
        .ColHeaderCaption(0, 1) = "CODICE"
        .ColWidth(0, 0) = 6000: .ColWidth(1, 0) = 800
    End With
End Sub
Private Sub GRIGLIA_Click()
    If GRIGLIA.Rows > 2 Then
        Svuota
        DisAbilita
        sComandoInt = "modifica"
        With Me
            .txt_IDSFAMIGLIA.Text = GRIGLIA.TextMatrix(GRIGLIA.RowSel, 1)
            CaricaRS
        End With
    End If
End Sub
Private Sub CaricaGriglia()
    SQL = "SELECT * From sFAMIGLIE"
    Set RS = ADOConn.Execute(SQL)
    If Not RS.EOF Then
        Do While Not RS.EOF
            Me.GRIGLIA.AddItem RS("DESCRIZIONE") & vbTab & 
RS("ID_sFAMIGLIA")
            RS.MoveNext
        Loop
    End If
End Sub
***********************************************************************
 

 ***********************************************************************
provo a spiegarti quello che intendevo, usando gli esempi che hai postato.
il frmSottofamiglie e' il chiamente, giusto?
ha una griglia, dei text e un pulsante TMS_BUTTON1 che serve ad attivare 
il frmRic_Griglia dopo di che usi Activate e Deactivate ma non ho capito 
bene come.
il frmRic_Griglia invece ha una griglia che visualizza il risulato di 
una query che imposti in frmRic_Griglia_FormLoad in funzione di NomeForm 
mentre in GRIGLIA_Click vai a impostare i valori nel form chiamante.
dunque modificando i form secondo il sistema che ti ho postato dovresti 
ottenere questo (circa):
===========================
*file: frmRic_Griglia*
Public NomeForm As String ' Questa ti serve per decidere il tipo
                              ' di griglia da visualizzare
Public Event Selezione(Riga)
Private Sub Form_Load()
      txtNOMEFORM.Text = NomeForm
..... *tutto come prima*
End Sub
Private Sub GRIGLIA_Click()
If GRIGLIA.Rows > 2 Then
     RaiseEvent Selezione(GRIGLIA.RowSel)
end if
End Sub
===========================
*file: frmSottofamiglie*
Private WithEvents Griglia As frmRic_Griglia
Private Sub TMS_BUTTON1_Click()
     Set Griglia = New frmRic_Griglia
     Griglia.TipoGriglia = "sfamiglia"
     Griglia.Show
End Sub
Private Sub Griglia_Selezione(Riga As Variant)
    txtSFAMIGLIA.Text = Griglia.GRIGLIA.TextMatrix(Riga, 0)
    txt_IDSFAMIGLIA.Text = Griglia.GRIGLIA.TextMatrix(Riga, 1)
    Unload Griglia
    Set Griglia = Nothing
End Sub
 > Private Sub Form_Load()
 >     Left = 200
 >     Top = 100
 >* '    NomeForm = "sfamiglia" 'questa non serve*
 >     Abilita
 >     Toolbar.Buttons.Item(1).Enabled = False
 >     Toolbar.Buttons.Item(2).Enabled = False
 >     Toolbar.Buttons.Item(3).Enabled = True
 >     Toolbar.Buttons.Item(4).Enabled = True
 >     Toolbar.Buttons.Item(5).Enabled = False
 >     Toolbar.Buttons.Item(6).Enabled = False
 >     sComandoInt = "nuovo"
 >     SvuotaGriglia
 >     CaricaGriglia
 > End Sub
 >
--------Eliminare da qui
 > Private Sub Form_Activate()
 >     If NomeForm_OLD <> "" Then
 >         NomeForm_OLD = NomeForm
 >         NomeForm = "sfamiglia"
 >     Else
 >         NomeForm = "sfamiglia"
 >     End If
 > End Sub
 >
 > Private Sub Form_Deactivate()
 >     If NomeForm <> "" Then
 >         NomeForm_OLD = NomeForm
 >     Else
 >         NomeForm = "sfamiglia"
 >     End If
 > End Sub
---------A qui
tutto il resto resta uguale
bye
r

 Private Sub Selezione(Riga As Variant)        ' NON ENTRA QUI


> End Sub
Gli eventi vanno dichiarati, ovviamente, come Event, non come Sub.
Es.:
'------------------
Private Event Selezione(Riga As Variant)
    '[...]
End Event
'------------------
Sicuro, comunque, di aver bisogno di scatenare un evento?
Se non hai bisogno di intercettare l'evento, ma solo di
eseguire la sub, devi usare la parola chiave "Call", non
"RaiseEvent".
Es:
'------------------
Private Sub GRIGLIA_Click()
   If GRIGLIA.Rows > 2 Then
      'ENTRA QUI
      Call Selezione(GRIGLIA.RowSel)
   End If
End Sub
Private Sub Selezione(Riga As Variant)
    '[...]
End Event
'------------------
hth,
Lokar 

 "RaiseEvent".
Non so se hai seguito tutta la discussione.. il problema è che il mio form 
della griglia, il chiamato, deve essere indipendente dal chiamante per 
evitare di modificare ogni volta tutto quando ci sono variazioni... 

RISOLTO RAGAZZI... GRAZIE MILLE A TUTTI!!!