Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - errore con Option Strict On
Forum - C# / VB.NET - errore con Option Strict On

Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 17:33
Venerdì, 09/10/2009
Questo topic è stato chiuso dal moderatore

Ho una label1 con il tag=1
Quando clicco sulla label con Option Strict Off non da errore e mi restituisce il tag, con Option Strict On si presenta l'errore.


    Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)

        Msg.Text = sender.tag

    End Sub

sender.tag  errore: Option Strict On non consente l'associazione tardiva

Come faccio a dare un'associazione non tardiva?

PM
Avatar
BugliL (Member)
Pro


Messaggi: 135
Iscritto: 09/08/2009

Segnala al moderatore
Postato alle 18:25
Venerdì, 09/10/2009
Esegui un Cast
La proprietà TAG è di tipo oggetto, con strinct on non fa la conversione in testo :)
Codice sorgente - presumibilmente Plain Text

  1. Msg.Text = cstr(sender.tag)


PM
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 19:06
Venerdì, 09/10/2009
Non so cosa sia fare un cast
Se fare un cast significa il cstr(sender.tag) non è cambiato nulla

Continua a darmi errore.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:45
Venerdì, 09/10/2009
L'associazione tardiva è il nome stupido in italiano del Late Binding. In questo caso richiami la proprietà Tag da un oggetto di tipo Object. Ovviamente il compilatore non produce un errore, come avrai notato; tuttavia, saprai anche che la classe System.Object non espone la proprietà Tag.
Il fatto che non segni errori deriva proprio dal late binding a cui è sottoposta la variabile di tipo Object: dato che ogni altra classe deriva da essa, è permesso richiamare proprietà di cui noi siamo sicuri dell'esistenza a runtime, sebbene non siano direttamente esposte dalla classe. Infatti, anche se sender è di tipo Object, contiene un valore di tipo Control, che possiede appunto la proprietà Tag.
Quello che ti suggerirei è l'esecuzione, comunque di un cast, ma di sender e non di tag:
Codice sorgente - presumibilmente Plain Text

  1. Msg.Text = DirectCast(sender, Control).Tag


Control è generico e indipendente dal tipo di controllo: se si tratta di un pulsante, puoi anche specificare Button.

PM
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 23:58
Venerdì, 09/10/2009
Molto chiaro. Tutto a posto.
Grazie Il Totem

PM