Select Case ModComune.FormChiamante
Case "ObArchProgettiMod"
ObArchProgettiMod.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObVisProgetti"
ObVisProgetti.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObInsAzioni"
ObInsAzioni.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObAnnAzioni"
ObAnnAzioni.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObInsDatiMensili"
ObInsDatiMensili.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObVisProgDati"
ObVisProgDati.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
Case "ObVisProgAzione"
ObVisProgAzione.TB_CodiceProgetto.Text = Trim$(hRecProg!prog_codice)
End Select
Avevo già postato la domanda formulata in maniera diversa.
Questa parte di codice viene richiamata da vari programmi/form.
Ogni programma chiamante ha una textbox denominata TB_CodiceProgetto dove viene passato un codice letto da un db.
Esiste una formulazione elegante per eliminare questa sfilza di condizioni case.
Il nome del Form chiamante sta in un modulo comune ModComune.FormChiamante. E' possibile ?
ci sono vari modi, forse il più semplice è utilizzare una funzione che ti ritorna un valore
ad esempio nel form1 chiamante metti: (la variabile cod_prog deve essere pubblica)
ObArchProgettiMod.TB_CodiceProgetto.Text=trova_codice()
nella tua funzione invece:
PUBLIC SUB trova_codice()as string
DIM risultato as string
risultato=Trim$(hRecProg!prog_codice)
RETURN risultato
in alternativa puoi utilizzare gli oggetti,
ad esempio nel form chiamante richiami la funzione che ti serve dando il nome dell' oggetto in cui deve scrivere il risultato:
trova_codice("ObArchProgettiMod.TB_CodiceProgetto")
PUBLIC SUB trova_codice(oggetto as OBJECT)
oggetto.text=Trim$(hRecProg!prog_codice)
END
Scusami se rispondo con ritardo , ma ho capito il concetto ma mi risulta difficile l'applicazione. Non riesco a inserire opportunamente nel programma esistente le semplici istruzioni che hai postato.
il programma chiamante :
Public Sub BTN_SceltaProgetto_Click()
ObElencoProgetti.Show
End
Public Sub TB_CodiceProgetto_Change()
Dim sTabella, sWhere, sCondizione As String
ConnettiDB
sTabella = sFileProgetti
sWhere = "prog_codice=&1"
sCondizione = Trim(TB_CodiceProgetto.Text)
hRecProg = $hConn.Find(sTabella, sWhere, sCondizione)
Visualizza_Progetto()
Visualizza_Azioni()
End
tramite il BTN_SceltaProgetto richiama un programma che visualizza i progetti presenti in un DB, questo programma ripassa al programma chiamante il codice del progetto con Obxxxxx.TB_CodiceProgetto.Text(l'insieme delle CASE ) e a questo punto a fronte dell'evento change il programma chiamante mi visualizza i dati del Progetto. Dove inserire la chiamata alla funzione che mi dovrebbe ridare il codice del progetto? Il programma che mi visualizza l'elenco dei progetto devo sempre chiamarlo. Scusatemi ma la programmazione ad oggetti non è il mio forte.
potrebbe essere qualcosa del genere:
' da inserire nel form chiamante che presupponiamo si chiami Fpippo
PUBLIC SUB BTN_SceltaProgetto_Click()
ObElencoProgetti.load
ObElencoProgetti.Show
ObElencoProgetti.destinatario="Fpippo.TB_CodiceProgetto"
END
PUBLIC SUB TB_CodiceProgetto_Change()
DIM sTabella, sWhere, sCondizione As String
ConnettiDB
sTabella = sFileProgetti
sWhere = "prog_codice=&1"
sCondizione = Trim(TB_CodiceProgetto.Text)
hRecProg = $hConn.Find(sTabella, sWhere, sCondizione)
Visualizza_Progetto()
Visualizza_Azioni()
End
'''''codice da inserire in ObElencoProgetti
'variabile pubblice che memorizza il destinatario
PUBLIC destinatario as object
PUBLIC SUB evento_di _selezione_progetto()
destinatario.text=Trim$(hRecProg!prog_codice)
END
ps: un consiglio che non centra nulla con la tua richiesta:
con alcune combinazioni di gambas e gnome può capitare che avviando un form solamente con l' istruzione nomeform.show,alla chiusura ti tale form questo crashi, per sicurezza io solitamente avvio un form con la doppia istruzione:
nomeform.load
nomeform.show