Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Problema con il metodo ADDHANDLER
martedì 08 giugno 2004 - 09.34
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
mar 8 giu 2004 - 09:34
Ciao david,
non so se ti ricordi ma tempo fa chiesi informazioni sul metodo AddHandler, sono riuscito a farlo aggiungendo dei pulsanti su una panel, ti posto l'esempio.
pulsante = New Button
Me.Panel2.Controls.Add(pulsante)
AddHandler pulsante.Click, AddressOf clicksubottone
Private Sub clicksubottone(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim btn As Button
btn = DirectCast(sender, Button)
Dim indice_camera As Byte
indice_camera = Mid(btn.Text, 1, 3)
ecc.... questa procedura mi consente di indentificare l'id che viene scritto sul pulsante che poi in finale rappresenta il numero di camera dell'albergo.
End Sub
ora mi trovo in un grosso problema, devo eseguire su ogni pulsante visualizzare il Contextmenu e fino qui non ci sono problemi ma poi mi serve sapere l'id come avviene nella sub clicksubottone, ma non mi funziona, ti posto il codice mi puoi dare una mano?
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
Dim btn As Button
btn = DirectCast(sender, Button)
Dim indice_camera As Byte
indice_camera = Mid(btn.Text, 1, 3)
ecc.
errore: CAST non valido
End Sub
ciao
Fabio
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mar 8 giu 2004 - 18:12
Ma....perchè vuoi convertire un oggetto menù in button???
Ora...io nn ho mai usato il context menù e quindi non lo conosco, tuttavia mi pare improbabile che tu possa eseguire il CASTING tra questi due oggetti. Insomma, mi sa tanto che l'errore te lo stia cercando! :-)
E tra l'altro lo ADDHANDLER nn c'entra niente col tuo problema.
Prova così:
Dim mn As MenuItem
mn = DirectCast(sender, MenuItem)
Non puoi sempre usare le solite istruzioni che usi nella gestione di un evento il cui SENDER è un BUTTON, almeno nn quando esegui un CASTING come in questo caso. Tra l'altro, tutto funzionerebbe anche senza quell'istruzione DIRECTCAST, se nn sbaglio, tuttavia è un'ottima abitudine di programmazione e quindi fai bene ad usarla.
Saluti!
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
mar 8 giu 2004 - 18:34
Il discorso che facevo è che io con il codice che ho postato ho creato una serie di pulsanti a cui associo dei numeri che mi rappresentano degli indici di ricerca in una tabella, il Contextmenu mi serve perchè al suo interno associo delle operazioni da svolgere nella tabella che ho citato precedentemente ma per far ciò ho bisogno che quando clicco su un'operazione elencata nel menupopup deve andare a prendere il numero del pulsante di riferimento.
Ciao
Fabio
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 9 giu 2004 - 10:07
Asp....nn ho intenzione di farti il terzo grado sul perchè della tua procedura :-)
Do per scontato che tu abbia le tue buone ragioni. Il mio era un discorso mirato ad una particolare riga di codice. Mi scuso se nn sono stato chiaro. Capisco adesso che nel non aver chiarito meglio il concetto, posso essere sembrato critico verso questioni nelle quali nn voglio metter bocca!
Facciamoci una chiacchierata che forse potrà risultare utile spunto di riflessione anche x altri amici.
Tu stai usando una corretta tecnica di early binding, cioè di associazione preventiva. In pratica tu hai un oggetto (il SENDER, cioè il MITTENTE), sulla cui natura (TEXTBOX, BUTTON, LABEL,ecc...), ancora nn abbiamo notizie precise. In realtà sappiamo, nel tuo caso, che si tratta dell'Item di un Menù, perchè è su di lui che l'evento click ha avuto luogo ed è quindi lui che ci ha spediti alla routine di gestione dell'evento.
Tu potresti tranquillamente chiedere il testo dell'oggetto SENDER (sender.text) senza operare quella conversoione di tipo (CASTING) che usi per assegnare ad un generico oggetto SENDER uno specifico tipo di oggetto. Tuttavia il tuo è il modo giusto: intanto lo intellisense ti fornirà indicazioni più corrette, poi eviterai alcuni errori di run time e l'esecuzione sarà più veloce. Se tu avessi l'opzione Option Strict=ON nel progetto (di default essa è posta = OFF) saresti addirittura obbligato a usare il codice che usi tu. Tuttavia, come ti dicevo, potresti usare anche il Late Binding, ossia l'associazione successiva. Se ti rivolgi direttamente all'oggetto SENDER, sarà il compilatore a dover determinare che tipo di oggetto è (abbiamo detto trattarsi dell'Item di un menù) e se le operazioni che tu vuoi compiere con quell'oggetto sono compatibili con la sua natura. Tutto questo a run-time, cioè mentre l'applicazione gira. Se tenti di fare un'operazione nn compatibile con un MenuItem, avrai un errore di run time, ma se usi il tuo codice, la cui funzione è di implementare l'early binding, questo tipo di errori ti verranno segnalati in face di generazione, come qualunque errore di sintassi. Ecco perchè è bene usare la conversione come fai tu. Il problema è che tu gli stai dicendo: Caro compilatore, affinchè tu possa dirmi preventivamente se sto facendo un uso corretto dell'oggetto SENDER, ti comunico che tale oggetto è un BUTTON e saresti gentilmente pregato di assegnarmi tutto quanto ad esso attiene all'oggetto BUTTON che ho chiamato 'btn'. Il compilatore fa tutti i suoi controlli e ti dice: Oh, sarò vecchio e rincoglionito e per di più sono stato fatto dalla microsoft (e scusa se è poco), ma l'oggetto SENDER che vorresti assegnare, armi e bagagli, al tuo caro oggetto BUTTON di nome btn, è un oggetto di tipo MenuItem e col piffero che te la posso fare questa assegnazione! E quindi ti spara l'errore di CASTING. Ecco perchè ti consiglio di operare una semplice modifica:
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
Dim btn As MenuItem
btn = DirectCast(sender, MenuItem)
Dim indice_camera As Byte
indice_camera = Mid(btn.Text, 1, 3)
Così eviti l'errore di CASTING (almeno spero, nn l'ho provato!), se poi la procedura ti dà anche i risultati sperati, beh....quello è un altro discorso.
Spero che quanto detto ti sia utile e scusa se prima sono stato troppo affrettato.
Buon lavoro :-)
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 9 giu 2004 - 10:42
Aggiungo.....che nn ho capito bene cosa vuoi e devi fare e anche x questo motivo mi tengo fuori dal darti consigli generali sulla tua applicazione. Se tu avessi bisogno di ulteriore aiuto, ammesso e non concesso ch'io sia in grado di dartelo, sarò a tua disposizione. Allo stato attuale, essendo anch'io vecchio e rincoglionito come il compilatore del mio precedente post, nn ho capito assolutamente cosa ti serve e quindi ho puntato l'indice sull'unica cosa sulla quale potevo dire la mia ( e che è all'origine dell'errore che ti ritrovi). Di nuovo saluti e buon lavoro.
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
mer 9 giu 2004 - 12:13
non preoccuparti, ho risolto, cmq grazie mille
Ciao
Fabio
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !