Newsgroup: it.comp.appl.access
Titolo: passare caption di etichetta a funzione

Salve, semplifico il mio problema:
in una form ho 100 etichette con testo che varia in base a dei parametri.
dovrei al click di ogni etichetta richiamare una funzione passando come 
parametro il testo dell'etichetta stessa.
Ho scritto la mia funzione in un modulo e l'ho chiamata  funcPippo
es
function funcPippo(testoEt as string)
....
...
msgbox testET
end function
Poi nell'evento onclik di ognuna delle 100 etichette ho messo 
"=funcPippo(?????)"
ma non so cosa mettere al posto dei punti di domanda per passare alla 
funzione il testo dell'etichetta stessa.
Es al click dell'etichetta con testo "30bis" dovrei avere come risultato un 
msgbox "30bis"
E' possibile?
Saluti, Ivan

 ha scritto nel messaggio 
news:47319243$0$4785$4faf...@reader4.news.tin.it...

intendi cosi?
Private Sub Etichetta0_Click()
    miafunc (Etichetta0.Caption)
End Sub
Private Sub Etichetta1_Click()
    miafunc (Etichetta1.Caption)
End Sub
Sub miafunc(str As String)
    MsgBox (str)
End Sub

 ha scritto nel messaggio 
news:47319ae7$0$36443$4faf...@reader5.news.tin.it...

no volevo appunto evitare di scrivere 100 sub tutte uguali.
Volevo farne una funzione unica, che però accettasse compe parametro di 
input il testo scritto nell'etichetta stessa
ciao, Ivan

 parametro il testo dell'etichetta stessa.
Nota a parte: se hai creato una Function è perché ti serve un valore di
ritorno, altrimenti non ha senso ed è meglio che crei una Sub.
In ogni caso, non è così semplice quello che vuoi ottenre, perché le
etichette non possono avere il focus, quindi non è possibile riferirsi ad
esse, ad esempio, con l'oggetto ActiveControl.
Modificando leggermente il tuo esempio, se utilizzi l'evento Click
dell'etichetta e nel corpo di questo evento (nel VBA, non nella maschera
delle proprietà del controllo in questione) metti una delle seguenti
istruzioni, otterrai cose diverse da quello che chiedi, o, addirittura, un
errore:
Debug.Print Me.Caption
ti restituisce la caption della form
Debug.Print Me.ActiveControl.Caption
ti restituisce un errore perché, se l'etichetta non è legata ad un
controllo, non esite l'ActiveControl
Quello che dovresti scrivere nel corpo dell'evento Click dell'etichetta è
quanto segue:
Debug.Print Me.nomecontrolloetichetta.Caption
Tuttavia, credo che questo ti porti a dei problemi perché non puoi
limitarti a richiamare una eventuale funciont/sub inserendone il nome nella
proprietà OnClick di ogni etichetta: dovresti andare a modificare l'evento
OnClick nel VBA per ogni etichetta.
-- 
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution

ivan ha scritto:

Su 
http://www.donkarl.com/it/CISA/Download.htm
 trovi una mia relazione
'WithEvents e RaiseEvent' che fa proprio al caso tuo.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Se non vuoi usare il suggerimento di M. Pizzamiglio che e' il piu' 
elegante, dato che hai messo quella istruzione sull'evento di click e 
dato che, mi immagino, non modifichi la caption dinamicamente (in tal 
caso e' sufficiente modificare il valore dela "event procedure") per 
quale motivo sulla =funcPippo(?????) non metti direttamente il valore 
della captio =funcPippo("caption") ?
-- 
ac
y-1=x

 della captio =funcPippo("caption") ?
Nel modo che stai suggerendo lui dovrebbe manualmente andare a modificare
la proprietą OnClick di ogni label inserendo manualmente la caption.
Credo che lui vorrebbe invece ottenere un sistema automatico/dinamico.


 'WithEvents e RaiseEvent' che fa proprio al caso tuo.
La tua demo, Marco, è veramente un punto di riferimento.
Per capire meglio: lui dovrebbe avere una classe (di tipo label) che
istanzia tante volte quante sono le etichette delle quali deve gestire
l'evento Click.
Poi, all'interno dell'evento Click richiama la funzione (che, a questo
punto, potrebbe anche essere inserita nella classe).
La domanda che mi viene spontanea è la seguente: da dentro l'istanza in
questione è possibile quindi accedere senza problemi a tutte le proprietà
della label?


 
Non mi pare. Lui credo pensasse di scrivere sull'evento di click di ogni 
label il nome della funzione da richiamare appunto nella forma =func(x). 
La cosa che voleva evitare, a quanto ho percepito, era di attivare la 
Routine di click per ogni etichetta. La stessa cosa la potrebbe fare 
nella open di form ciclando i controls ed attivando dinamicamente la 
[Event Procedure] per le etichette.
Quest'ultima e' piu' una risposta a lui che non a te che conosci bene i 
comportamenti del sistema.
-- 
ac
y-1=x

 comportamenti del sistema.
Ti ringrazio ;-)
Come hai già fatto notare tu, credo anche io che la soluzione che passa per
le classi sia la più pulita.


 non ho esperienza diretta.
Uhmmm....trovo strano che non si possa fare in un mde.
Tra l'altro mi sembra di averlo anche fatto.
Cmq, in questo caso, la attivazione su open di form mi sembra la piu' 
semplice. Dovrebbero essere 4 0 5 istruzioni.
-- 
ac
y-1=x

Gabriele Bertolucci ha scritto:


Si, la funzione la puoi richiamare o anche scrivere già sull'evento click.
Se è parecchio corposa è meglio metterla fuori dalla classe per evitare
che venga istanziata 100 volte sprecando memoria, altrimenti il codice può
anche stare nell'evento click nel modulo di classe.
Nel modulo di classe hai a disposizione un'oggetto che punta alla label
quindi ne puoi usare tutte le proprietà come se fossi nel codive VBA della
maschera.
Con più o meno una ventina di righe di codice (più la function) si risolve
il problema, qualunque sia il numero di label da gestire.


ivan ha scritto:

Premesso che ti consiglio di usare withevents, anche per accrescere le tue
esperienze di programmazione, se vuoi puoi usare un metodo rapido, grezzo,
da copia-incolla:
Se scrivi la sub evento tutta su una riga separando le istruzioni con i
due punti poi sarà facilissimo copiarla 100 volte e cambiare i numeri a
mano da tastiera, o scrivere una routine che generi il blocco di righe:
Private sub Etichetta001_click: Mia_funz(Etichetta001.Caption): End sub
Private sub Etichetta002_click: Mia_funz(Etichetta002.Caption): End sub
Private sub Etichetta003_click: Mia_funz(Etichetta003.Caption): End sub
Private sub Etichetta004_click: Mia_funz(Etichetta004.Caption): End sub
.....
Private sub Etichetta100_click: Mia_funz(Etichetta100.Caption): End sub
Nella maschera selezioni in blocco le 100 etichette e nella riga
dell'evento click imposti [Routine evento].


 ha scritto nel messaggio 
news:CfiYi.6520$Hn....@tornado.fastwebnet.it...

ciao...perchè la caption varia con il variare di alcuni parametri
ciao, Ivan

 ciao...perchè la caption varia con il variare di alcuni parametri
Questa cosa e' oscura. Cosa significa "varia con il variare di alcuni 
parametri" chi la varia? quando? perche?
La modifichi dinamicamaente via codice?
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:uakYi.6734$Hn....@tornado.fastwebnet.it...

per farti un esempio...il classico controllo calendario fatto da 7X5 
pulsanti che hanno una caption diversa in base all'anno e al mese che viene 
selezionato
...molto simile come idea
ciao
Ivan

 ivan
Perche non vedi questo demo... utilizza proprio la tecnica di Marco..
http://www.accessgroup.it/HomeArgomenti.asp?ID=146&Oggetto2=Eventi%20grafici%20Mouse%20su%20Label
--
sv


 ...molto simile come idea
Non Comprendo. E' fisso o lo fai via codice?
Da qualche parte mi pare di capire che fai una cosa del genere
etic.caption = "blabla"
chi ti vieta nello stesso punto di fare
etic.onclick = "=func(" & "blabla" & ")"
In qusto modo non devi scrivere nulla nella form delle proprieta'
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:6DkYi.6781$Hn....@tornado.fastwebnet.it...

si esatto faccio etic.caption="blablaba"...non ci avevo pensato che posso 
settare in questo momento il richiamo della func...anzi non pensavo proprio 
si potesse
avevo appena finito con la soluzione del withvents.
A questo punto quale delle due soluzioni è meglio?
ciao, Ivan

 ha scritto nel messaggio 
news:fgsk8b$tch$1...@news.newsland.it...

proprio quello che mi serviva.
grazie
ivan 

 A questo punto quale delle due soluzioni č meglio?
Avevo premesso che quella con la withevents e' piu' elegante.
Se gia' la hai implementata "as you like"
-- 
ac
y-1=x