Newsgroup: it.comp.lang.visual-basic
Titolo: passare dei controlli ad una funzione

Ciao a tutti, ho questo problema:
Siccome voglio cambiare lo sfondo dei controlli di una maschera quando
l'utente li edita, mi sono creato una funzioncina, che non fa altro che
salvare il colore originario nella tag del controllo, e cambiare il
backcolor del controllo.
Il mio problema è che vorrei usare questa funzione con tutti i controlli
(textbox, combobox, radiobutton...). Siccome purtroppo il polimorfismo non
c'è (sarebbe stato troppo facile), che tipo devo dare al parametro della
funzione ?
Ho provato control e object, ma mi dà un errore di tipo non corrispondente.
Siccome vorrei evitare Any, qualcuno ha qualche suggerimento ?
Grazie fin d'ora.
Ciao
Alfonso Moscato

A me hanno sempre funzionato, posta un semplice ma reale esempio di cosa
fai.
Salve
                Dbg
Alfonso Moscato ha scritto nel messaggio
]zac[


 ha scritto nel messaggio
news:S1Og6.21830$GM6.1...@news.infostrada.it...


semplicamente. Boh
Si puo', lo faccio da una vita senza problemi.
Dimmi il punto esatto in cui ti da' errore e che messaggio ti da' (controlla
bene, stai prendendo un abbaglio clamoroso (prova a togliere tutte le
istruzioni all'interno della funzione cambiato).
Salve
                Dbg

 Set ctlControllo = Me.controls("text1")
Mi sembra strano .. comunque non c'č č bisogno di utilizzare una variabile
Control (ctlControllo) per passare un controllo come parametro.
Prova :
Sub Cambiato(ctlControllo as TextBox)
    ctlControllo.tag =format(ctlControllo.backcolor)
    ctlControllo.backcolor = blablabla
 end function
e richiamare
Cambiato text1
Facci sapere ...
    Davide

 ha scritto nel messaggio
news:JGOg6.21988$GM6.1...@news.infostrada.it...


 Mi sembra strano .. comunque non c'è è bisogno di utilizzare una variabile


stringa)
Ma no ma no! e' solo che la proprieta' text del textbox e' quella
predefinita, scrivere ?txt1.text o ?txt1 e' la stessa cosa.
In debug scrivi ?vartype (ctlControllo) o ?varname (cltcontrollo) e vedrai
che e' un oggetto.
Ma porca pupazzola vuoi dire o no su che riga e che messaggio di errore ti
da?
Ufff dai non farmi faticare per niente.
Salve
                Dbg

vartype e typename
E anche tasto destro sulla variabile, aggiungi espressione di controllo,
premere ok e spulciare la finestra che compare.
Si puo' usare anche il visualizzatori di oggetti.
Salve
            Dbg
Della Bianca Giuseppe ha scritto nel messaggio ...


 ha scritto

mi sembra avesse ragione fox, ti basta passare il controllo senza parentesi.
non so come si usa tag, quindi ho sdoppiato la sub e usato delle var
pubbliche.
dbg adesso mi bacchetta e fa una classe all'uopo, ma intanto sembra
funzionare :)
ciao, a.
Option Explicit
Dim oldBack, oldFore
Private Sub Evidenzia(c As Control)
   'ctlControllo.Tag = Format(ctlControllo.BackColor)
   oldBack = c.BackColor
   oldFore = c.ForeColor
   c.BackColor = vbYellow
   c.ForeColor = vbBlack
End Sub
Private Sub Ripristina(c As Control)
    c.BackColor = oldBack
    c.ForeColor = oldFore
End Sub
Private Sub Combo1_GotFocus()
    Evidenzia Combo1
End Sub
Private Sub Combo1_LostFocus()
    Ripristina Combo1
End Sub
Private Sub Text1_gotfocus()
    Evidenzia Text1
End Sub
Private Sub Text1_LostFocus()
    Ripristina Text1
End Sub

 ha scritto nel messaggio
news:ksQg6.22516$GM6.1...@news.infostrada.it...


 ha scritto nel messaggio
news:ksQg6.22516$GM6.1...@news.infostrada.it...


 > backcolor del controllo.
[...]

 Cmq grazie a tutti per la pazienza
Hmmm... non saprei; ho provato a copiare la tua Sub e a chiamarla nel Form_Load
semplicemente cosi':
Dim objControl As Control
For Each objControl In Controls
    Cambiato objControl
Next
e non mi ha dato problemi (con un po' di controlli a caso:
label,textbox,listbox,listview...)
Ciao
--
Luca Dormio
luca....@tin.it


[...]


 Mi puoi dare qualche dettaglio ?
[SNIP]
Non c'e' molto da dire; per quel che mi ricordo si verifica quando usi chiamate
di questo tipo:
SubProva (param1)
x=FuncProva(param1,(param2), param3) 'il secondo parametro e' "castato" come
variant
al posto di
Call SubProva(param1)
x=FuncProva(param1,param2, param3)
se sbagli te ne accorgi per lo piu' quando succede con parametri oggetto (il tuo
"Control" ad esempio).
In genere e' una noia ma ci sono anche applicazioni pratiche per questa cosa:
e' utile ad esempio quando devi interfacciare una DLL ActiveX con pagine ASP;
dato che il linguaggio script in queste ultime supporta solo il variant puoi
evitare certi conflitti di tipo quando invochi una funzione della DLL usando
appunto questa sintassi.


funzionare :)
Ne bacchetto solo uno al giorno, sara' per la prossima heheh
Salve
                Dbg