Newsgroup: it.comp.lang.visual-basic
Titolo: Domandina sul passaggio dei parametri

Ciao a tutti, sto "sviluppando" un'applicazione per database che purtroppo
usa il controllo data (non so usare altro...). Cmq il problema non è questo.
La mia applicazione si compone di diversi form. Per farla breve ho un form
con 4 caselle di testo, quando clicco su una casella di testo mi appare un
secondo form con una listbox e io ho la possibilità di selezionare una voce,
successivamente la voce viene copiata nella casella di testo e il form con
la listbox sparisce. Il problema è questo...
Per far apparire il 2° form ho usato semplicemente
form2.show
ma siccome uso lo stesso form per tutte e 4 le caselle di testo vorrei
passare un parametro per far riconoscere al form2 la casella di testo che è
stata cliccata, in modo che il valore venga copiato in quella giusta. Per
ora ho risolto con una variabile globale e un select case...ma non mi piace
tanto la soluzione ^__^
non c'è un comando alternativo a form2.show che mi permetta di fare un
passaggio di parametri? Che ne so qualcosa tipo
Call Form2_load(variabile_casella as integer) che poi mi va a richiamare la
routine di
Form2_load(var)
select case var
case 1
form1.text1.text = ...
case 2
form1.text2.text=...
e cosi via
Suggerimenti? Grazie a tutti

 stata cliccata, in modo che il valore venga copiato in quella giusta.
 [CUT]
Potresti creare una matrice di controlli anzichè 4 textbox indipendenti
Ciao

 stata cliccata, in modo che il valore venga copiato in quella giusta.
[...]
    Considera che il form e' un modulo di classe. Puoi quindi aggiungergli
proprieta', metodi, eventi...
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 tanto la soluzione ^__^
Il modo piů elegante č quello legato alla programmazione OO, che purtroppo
in VB molti dimenticano.
Comunque, per farla breve, basta creare un metodo MyShow nella form, e
chiamarlo al posto dello Show intrinseco.
In sostanza, nella form chiamata:
Private Casella as Object
Public Sub MyShow (byref Controllo_Cliccato as object)
Set Casella = Cliccato
Me.Show vbModal
End Sub
Per popolare la TextBox corretta, fai (prima di Hide):
Casella.Text="Mio testo"
Me.Hide
Dalla form principale, chiami:
Form_di_Selezione.MyShow (TextBox1)
Ciao
Alberto

 Potresti creare una matrice di controlli anzichè 4 textbox indipendenti
Ciao, ho provato a usare una matrice di controlli (mai usata prima) e l'ho
trovata molto comoda, ma non risolve lo stesso il mio problema :-(
Cerco di spiegarmi meglio
Codice form1
Private sub text1_dblclick()
form2.show
end sub
Codice form2
Private sub list1_dblclick()
form1.text1.item( * ) = list1
form2.hide
end sub
* nella parentesi io metto il valore che corrisponde alla textbox...quindi 0
corrisp alla prima, 1 alla seconda ecc. Ma non so come fare a "passare" il
valore della textbox che ho cliccato. Io clicco sulla terza text1...come
faccio poi a dire al programma di mettere il valore della listbox nella
casella da me cliccata? Avevo risolto con la variabile globale, ma volevo
sapere se c'era un metodo + "elegante" tipo un passaggio di parametri.
Oppure la matrice di controlli ha qualche altra funzione a me oscura? ^__^
Grazie ancora


Grazie a te e Maurizio per i suggerimenti...il fatto è che l'anno prossimo
sarò al 4 anno di itis e di queste cose a scuola neanche l'ombra...sto
imparando piano piano da manuali vari ma non sono ancora arrivato alla
creazione di proprietà e oggetti ^__^ in ogni caso oggi avrò un bel po di
tempo quindi cercherò di fare qualcosa col codice che mi hai scritto :-)
Grazie mille, stasera vi faccio sapere com'è andata. Ciao

 trovata molto comoda, ma non risolve lo stesso il mio problema :-(
In effetti non avevo capito come mai ti avessero suggerito l'array di
controlli.
A me sembrava che non c'entrasse niente con il tuo problema :-)))
Alberto

 A me sembrava che non c'entrasse niente con il tuo problema :-)))
E infatti non c'entra nulla :-) Spesso faccio casini nell'interpretare il
pensiero degli altri. Dovete avere pazineza con me! :-)
Ciao e grazie per l'osservazione.

 trovata molto comoda, ma non risolve lo stesso il mio problema :-(
Infatti. La mia risposta prevedeva una domanda diversa...:-) Non farci
caso...Comunque, visto che non conoscevi l'argomento, non è stata proprio
una cattiva idea la mia!!! ehehehe :-)
La direzione giusta te l'hanno indicata Maurizio Borrelli e Albe V° per
questo ti consiglio di muoverti in quella direzione.
Ciao.

 chiamarlo al posto dello Show intrinseco.
Ho provato come mi hai indicato te e ho cercato di capirne il senso
ovviamente... (ripeto che è la prima volta che uso gli oggetti :-). Da
quanto ho capito posso passare gli oggetti come se fossero variabili
qualsiasi... quindi in sostanza quando chiamo "myshow" gli passo un
parametro oggetto corrispondente alla textbox che ho cliccato. Ho fatto
esattamente come hai scritto te correggendo qualche errorino :-) ma c'è
qualcosa che non va...durante il debug mi dice "necessario oggetto" nella
riga relativa alla chiamata (nel mio caso form2.myshow (text1)) quindi
sembra che il programma non "interpreti" text1 come oggetto O__o cosa devo
inserire? Ho provato text1.text, form1.text1 e altro ma non funziona lo
stesso. Notare che se per prova scrivo form1 il programma va avanti
(ovviamente senza risultati ma sta a significare che form1 è riconosciuto
come oggetto). Suggerimenti x il mio problema? Grazia ^__^


 inserire?
Rigrazia l'inventore delle proprietà di default :)
E qualche piccolo rimasuglio di QBasic...
1) Se chiami una sub, assicurati di usare
Call MiaSub(parametri)
oppure
MiaSub parametri
questo perchè le parentesi forzano il passaggio ByVal del parametro, anche
se nella sub è dichiarato ByRef:
Call MiaSub((parametro))
equivale a
Call MiaSub(ByVal parametro)
che equivale a
MiaSub (paramtro)
' nota che in questo caso le parentesi si staccano dalla sub e non potresti
fare un
MiaSub (parametro1, parametro2), perchè le parentesi non sono della sub, ma
del parametro!
Adesso, passaimo al punto seguente:
2) Se passi ByVal un parametro 'sto 'becille di VB tenta una conversione del
parametro usando la proprietà di default:
(Text1) equivale a (Text1.Text)
Ma Text1.Text è una stringa e non un oggetto, quindi ti dice che non gli
piace.
Questo è un motivo in più per usare sempre dove possibile le proprietà
esplicite, e non lasciare spazio alla fantasia di VB.
3) Consiglio finale: usa sempre il tipo di dato più simile a quello che vuoi
passare, alzandoti di livello solo per allargare il range dei tipi che vuoi
supportare: VB è più veloce, eviti errori di incompatibilità tra tipi e puoi
sfruttare l'intellisense, impossibile con i tipi Object.
Nel tuo caso
As TextBox -- livello 1, non puoi sbagliare.
As Control -- livello 2, servono ad es. anche listbox? ricorda che le
proprietà sono diverse.
As Object  -- livello 3, servono anche oggetti OLE, ActiveX? Parametri per
classi ActiveX?
As Variant -- Livello 4, non sai se ti passano una stringa, una textbox, un
documento di word? allora sei messo male ;)
Ciao

 E qualche piccolo rimasuglio di QBasic...
[cut]
Grazie mille a te e a tutti gli altri che mi hanno suggerito...mi avete
insegnato molte cose :-) oggi farò un po di pratica. Ciao ciao a tutti