2010-04-07 9 views
6

sto cercando di conoscere i controlli utente. Ho creato un controllo utente con una casella di testo e un pulsante. Quello che mi piacerebbe essere in grado di fare è quando clicco sul pulsante nel controllo utente, compila un'etichetta nella pagina aspx. Capisco che potrei semplicemente avere un pulsante nella pagina che utilizza alcune proprietà sul controllo utente per ottenere quelle informazioni .. ma mi piacerebbe sapere come farlo con il pulsante del controllo utente .. la ragione di questo è il pulsante è solo un esempio ... uno strumento di apprendimento. se riesco a farlo funzionare, probabilmente metterei qualcosa nel controllo utente che potrebbe richiedere questo tipo di informazioni di passaggio. Ad ogni modo .. ho trovato alcuni esempi di C# che ho provato a lavorare come vb .. ma una volta ho iniziato ad entrare nei delegati e negli eventi .. beh .. mi ha fatto girare a questo post.asp.net controllo utente vb che genera un evento nella pagina chiamante

comunque .. speriamo che qualcuno possa dare una mano.

risposta

17

Vedere se this tutorial può essere d'aiuto. Il modo migliore per farlo è sicuramente quello di collegare un evento, che non è così difficile come pensi. Le basi sono:

1. Definire un evento nella tua classe di controllo:

Public Event MyEvent as System.EventHandler

2. Alzare l'evento in un sub o una funzione della classe di controllo:

RaiseEvent MyEvent(Me, New EventArgs())

3. Gestisci l'evento nella pagina che contiene il tuo controllo:

Protected Sub MyControl_MyEvent(ByVal sender As Object, ByVal e As EventArgs) Handles MyControl.MyEvent 
    'Do stuff here 
End Sub 
+0

grazie per le informazioni .. mi stavo chiedendo .. dato che hai un modo così bello e semplice di farlo .. come passi le informazioni indietro nell'evento .. o è così quando l'evento viene licenziato (il tuo? roba qui) Prenderò il valore dalla proprietà impostata sul controllo utente – jvcoach23

+0

Se si desidera passare nuovamente le informazioni nell'evento, è necessario modificare il codice "RaiseEvent" per restituire qualcosa di diverso da 'new EventArgs() '.Per semplificare, potresti anche passare una stringa, come questa: 'RaiseEvent MyEvent (Me, MyString)', e quindi modificare il secondo parametro del sottotitolo 'MyControl_MyEvent' sulla tua pagina per essere qualcosa come' ByVal s As String' invece di 'ByVal e As EventArgs'. Puoi passare tutto ciò che vuoi nell'evento. Ho appena usato EventArgs perché è un modo comune di farlo (la maggior parte delle persone usa la propria classe che eredita da EventArgs). – tloflin

+0

ottimo .. grazie per le risposte ... – jvcoach23

1

Il problema è che se si rende dipendente l'usercontrol dalla sua pagina padre, non è più portatile, e in primo luogo hai perso lo scopo di renderlo un usercontrol.

Questo è probabilmente il motivo per cui si stanno eseguendo i delegati e quant'altro in alcuni esempi: le persone stanno cercando di rimuovere la dipendenza dalla pagina padre consentendo a usercontrol di chiamare un metodo passato, invece di impostare direttamente l'etichetta in la pagina madre.

Se questo è solo per la pratica, è meglio premere un pulsante sulla pagina madre per impostare un'etichetta nel controllo utente, piuttosto che il contrario. Il modo in cui lo stai facendo ora non è un buon design e dovrebbe essere evitato per applicazioni reali.

+0

una cosa che stavo pensando per un controllo utente .. avere una casella combinata multipla che esegue l'autosuggest che verrebbe utilizzata in più posti .. l'ultimo elemento selezionato dall'utente è il valore che voglio. è piuttosto involuto e non voleva copiare e incollare tanto codice o confusione. quindi pensavo che un controllo utente avrebbe funzionato bene. la cosa è, una volta che quel valore è selezionato, speravo di non dover fare clic su un pulsante per ottenere il valore sulla pagina ... all'interno di ciò di cui stai parlando .. quale approccio prenderesti. grazie – jvcoach23

2

Credo che ciò che si vorrebbe fare è fare in modo che UserControl aumenti un evento. This MSDN article explains how to raise events e ha esempi VB. Quindi la tua pagina può iscriversi all'evento che il tuo UserControl solleva e imposta i valori che devi impostare. Potrebbe essere preferibile esporre alcuni dei campi UserControl (ad es. TextBox e così via) come proprietà pubbliche in modo che siano accessibili dal controllo sottoscritto.

Problemi correlati