Associare eventi a metodi

martedì 18 novembre 2003 - 16.19

Sandro Profilo | Newbie

Salve,
ho creato un custom control che contiene a sua volta dei controlli (per adesso due bottoni). Ho quindi inserito il custom control in una pagina aspx. Il mio problema è associare ad un evento del custom control (il click su uno dei bottoni), un metodo della pagina aspx in cui ho inserito il custom control.


Grazie per l'attenzione
Sandro

Sandro Profilo | Newbie

Non mi permette di accedere al "button1" di
<Addhandler user_control.button1.click,addressof tuometodo>

Riesco ad accedere alle proprietà di button1 ma non riesco ad associargli un metodo.


grazie per la risposta

Sandro

Sandro Profilo | Newbie

Contrordine,
funziona !!!

GRAZIE

luca76-rm Profilo | Newbie

se posso permettermi, vorrei suggerirti un metodo più elegante per risolvere il tuo problema.

Ammettiamo di avere il controllo utente riportato di seguito:

Public MustInherit Class userContro1
Inherits System.Web.UI.UserControl
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Button2 As System.Web.UI.WebControls.Button

#Region " Codice generato da Progettazione Web Form "

'Chiamata richiesta da Progettazione Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: questa chiamata al metodo è richiesta da Progettazione Web Form.
'Non modificarla nell'editor del codice.
InitializeComponent()
End Sub

#End Region

#Region "Eventi_Pubblici"
Public Event Button_Click(ByVal btn As Button)
#End Region


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Inserire qui il codice utente necessario per inizializzare la pagina
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RaiseEvent Button_Click(Button1)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
RaiseEvent Button_Click(Button2)
End Sub

End Class

piuttosto che rendere i due pulsanti pubblici, crei un evento pubblico che accetta n argomenti.
in questo caso ho creato un evento chiamato "Button_Click"
che accetta un solo parametro di tipo Button.
--Public Event Button_Click(ByVal btn As Button)--

Nota: tutti gli eventi del framework accettano due parametri.
es. Page_Load(sender as object, e as eventargs)
Non è necessario creare eventi in questo modo, ma sarebbe una soluzione più pulita soprattutto se il codice non lo devi leggere e manutenere solo tu.

Nell'evento click dei due pulsanti Button1 e Button2 sollevi l'evento con la parola chiave raisevent e gli passi il tipo di evento da riverberare e i parametri necessari.
--RaiseEvent Button_Click(Button2)--

Questo è il codice necessario nella pagina .ascx

Per quanto riguarda la pagina .aspx che deve ospitare il controllo, devi inserire il seguente codice:

Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents UC1 As userContro1
#Region " Codice generato da Progettazione Web Form "

'Chiamata richiesta da Progettazione Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: questa chiamata al metodo è richiesta da Progettazione Web Form.
'Non modificarla nell'editor del codice.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Inserire qui il codice utente necessario per inizializzare la pagina
End Sub


Private Sub UC1_Button_Click(ByVal btn As System.Web.UI.WebControls.Button) Handles UC1.Button_Click
Response.Write("Hai premuto il pulsante: " & btn.Text)
End Sub
End Class

Innanzitutto va dichiarata la variabile che punta al controllo utente da te creato
--Protected WithEvents UC1 As userContro1--

automaticamente nella combo di sinistra della finestra di progettazione ti viene aggiunto un nuovo oggetto chiamato UC1.

Se lo selezioni, vedrai nella combo di destra (dove sono elencati tutti gli eventi dell'oggetto in questione) apparire anche l'evento Button_Click.
Lo selezioni e visual studio ti crea la routine relativa a quell'evento

--Private Sub UC1_Button_Cli

Sandro Profilo | Newbie

Ti ringrazio del suggerimento.
Ho provato, ma non mi aggancia l'evento. Quando dici che dichiarando la variabile che punta al controllo, nella combo di sinistra della finestra di progettazione viene aggiunto un nuovo oggetto, intendi che dovrei vedere il controllo nella toolbox, insieme agli altri controlli ?


grazie
Sandro

luca76-rm Profilo | Newbie

ti sto mandando un esempio per email. Se hai un particolare problema, puoi anche mandarmi il codice e vedo cosa posso fare. Ciao

Sandro Profilo | Newbie

Ora funziona: grazie.

E' possibile controllare le proprietà dello user control dal pannello delle proprietà ? In caso affermativo, come ?
Oppure è necessario impostarle dalla pagina aspx che la richiama ?


grazie
Sandro

luca76-rm Profilo | Newbie

x Sandro: modificare le proprietà di un controllo utente in fase di design time non è possibile con l'attuale visual studio. Ho parlato con un evangelist della microsoft (con cui collaboro) e mi ha spiegato che questi piccoli problemi dovrebbero risolversi con le versioni future di visual studio.

x Coach: la gestione degli eventi con AddHandler è molto più flessibile della gestione standard che utilizza la parola chiave Handles, ma è consigliabile soprattutto per esigenze diverse dal problema di Sandro. Per esempio quando si devono associare diversi controlli ad una routine unica. Siccome però il tutto è gestito a runtime, i meno esperti potrebbero avere qualche difficoltà nel ricercare gli errori nel codice. Cmq non ho detto che la soluzione proposta da me è migliore delle altre. E' semplicemente un'alternativa.
Ciao

luca76-rm Profilo | Newbie

Coach, sono d'accordo con te. Infatti mi piace confrontare la mia esperienza con quella degli altri. Nel posto dove lavoro c'è tanta di quella incompetenza che non vale nemmeno la pena confrontarsi. Una domanda OT: qualcuno di voi ha provato VS.NET 2003? Io ho il dvd che mi hanno dato alla microsoft ma sfortunatamente non si installa.

Sandro Profilo | Newbie

Utilizzo VS.NET 2003 ma non ho notato particolari differenti con la versione precedente.


Sandro
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5