Newsgroup: it.comp.lang.visual-basic
Titolo: Riferimento a oggetto Label

Vorrei sapere come faccio ad ottenere un riferimento ad una label.
In particolare, voglio passarla come argomento a un metodo, il quale accetta
oggetti di tipo Object.
Il compilatore mi da type mismatch. Per lui, quando passo la label come
parametro, la label non è un oggetto di tipo label, ma string. come
faccio ad avere l'oggetto label?
Grazie,
MatB

 ha scritto nel messaggio
news:Xns92938ED993BF4...@193.70.192.192...

La label e' un oggetto di tipo Label, e quindi intrinsecamente anche Object.
Il tuo problema e' altrove... molto probabilmente deriva dal fatto che stai
inconsapevolmente accedendo alla proprieta' predefinita Caption (per
l'appunto String).
Prova a postare il prototipo della funzione e un esempio di chiamata...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 
Public Function Tran(obj As Object)
  Dim s As String
 
  Select Case TypeName(obj)
    Case "CommandButton", "Label", "OptionButton"
      obj.Caption = TSeek(obj.Caption)
 
  End Select
End Function
Suppenendo che ho una Label1, 
Tran Label1
Il problema è come dici tu, accedo alla prop predefinita. Infatti un 
commandbutton me lo da booleano. Come si fa a mandare a spasso la prop 
predefinita?
Grazie,
MatB

 predefinita?
Prova con
Call Tran(label1)
ma nella guida per TypeName (io non uso tale funzione) si legge:
Restituisce un valore String che fornisce informazioni relative a una
variabile.
Se il problema è questo (variabile, non oggetto), prova con TypeOf

 End Function
[SNIP]
Hmmm.... la funzione e' corretta, tanto e' vero che, copiata pari pari (ho
modificato solo TSeeek() con "pippo"), a me funziona.
la funzione e' per caso in una classe pubblica esterna al tuo programma?
(DLL ActiveX o robe simili)?
Tanto per provare, modifica il parametro usando obj As Control e vedi cosa
succede... se funziona comunque non e' un bel segno perche' deve andare
anche con Object, quindi c'e' qualcosa di latente da qualche parte.



[SNIP]
Mi sa che ci hai preso, anche se non intenzionalmente ;-)
Scommettiamo che la chiamata originale di MatB e'
Tran (Label1)
cioe' *senza* Call e *con* la parentesi?


 Mi sa che ci hai preso, anche se non intenzionalmente ;-)
Come sarebbe a dire "non intenzionalmente"? Che l'ho sparata? ;-)))

 Come sarebbe a dire "non intenzionalmente"? Che l'ho sparata? ;-)))
Solo che, come dice un amico, il tuo messaggio mi ha solleticato un neurone
:-)
Volevo dire che il tuo suggerimento "Call Tran(Label1)" e' esattamente
equivalente a "Tran Label1" e non dovrebbe alterare il risultato.
Quello invece che non e' equivalente (e che mi hai fatto venire in mente col
tuo messaggio) e' "Tran (Label1)", dove le parentesi superflue non sono
ignorate ma forzano invece un passaggio di parametro *per valore*... visto
come e' fatta la funzione incriminata (parametro Object), se davvero la sua
chiamata ha le parentesi il problema e' semplicemente li.


 chiamata ha le parentesi il problema e' semplicemente li.
Capisco e confesso: non lo sapevo.
Nessuna scusa, ma uso sempre e sistematicamente Call pippo (...). Grazie!
Mi ricorderò di citare questo topic al prossimo che chiederà "quanti anni di
esperienza hai dietro alle spalle?".
E aggiungerò: mi manca il prossimo topic.

 chiamata ha le parentesi il problema e' semplicemente li.
O_o troppo bello sto NG , non finisco mai di imparare , io uso sempre le
parentesi per una abitudine mentale , quindi se chiamo con call non cambia
nulla , ecco spiegato perche' dovevo usare sempre un byref ! Tnk !

 
Acc... Ch'hai preso...
dunque, ho letto anche gli altri post, ora funzia bene, chiedo scusa per 
l'inesattezza delle parentesi; ora però mi sorge una domanda: dici che le 
parentesi forzano il passaggio per valore. Ma allora, una funzione con 2+ 
parametri va per valore per default?
Tra l'altro, io nell'header della fn Tran avevo provato a mettere ByRef, ma 
non aveva cambiato nulla. 
Grazie a tutti, belli e brutti.
MatB

 parametri va per valore per default?
[SNIP]
Attento a non confondere le parentesi *obbligatorie* con quelle che non lo
sono.
La sintassi di VB mi pare fino alla versione 4 prevedeva questi 2 tipi di
chiamata:
Call routine(parametro1,parametro2,..., parametroN)
x=funzione(parametro1, parametro2,..., parametroN)
a cui e' stata aggiunta
routine<spazio>parametro1, parametro2,..., parametroN
per uniformarla, credo, con la chiamata di metodi di un oggetto ed eliminare
l'uso della parola chiave 'Call'
la chiamata fatta invece con
routine (parametro1)
e' spesso non intenzionale, serve appunto a forzare il passaggio per velore
ma andrebbe evitata senza un motivo valido... il fatto che sia "strana" e'
subito evidente da due cose
- le parentesi vengono colorate diversamente dall'editor
- se provi ad usarla con piu' di un parametro, nella maniera apparentemente
"naturale" routine (parametro1, parametro2) da errore, perche' la sintassi
corretta e' routine (parametro1), (parametro2)
Per farla breve, Mr.Wolf, che risolve problemi, direbbe
"ti prego, per cortesia, togli quelle cazzo di parentesi" ;-)
