Eventi a UserControl
-
21-08-2019 - |
Domanda
Sono nuovo di controlli utente, e sviluppando il mio controllo ho trovato un problema con mostrando eventi del mio controllo nella griglia delle proprietà in fase di progettazione. Se ho alcuni eventi in mio controllo voglio vederli nella griglia proprietà e se si fa doppio clic che voglio avere un gestore, nello stesso modo in cui Microsoft fa per i suoi controlli.
Soluzione
Essi dovrebbero apparire automaticamente se non mi sbaglio. Assicurati di aver costruito il progetto però, o modifiche non si propagano ad aprire i progettisti. E assicurarsi che sia un public
evento troppo. (Eventi private / protette giustamente non dovrebbero presentarsi perché non sono accessibili.)
Una cosa si può fare per rendere più piacevole l'esperienza di progettazione per l'utente è quello di fare qualcosa di simile al seguente:
[Description("This event is raised when the user presses the enter key while the control has focus."),
Category("Key")]
public event EventHandler EnterPressed;
Il bit "descrizione" mette un bel messaggio nel pannello descrizione della finestra delle proprietà. Il bit "categoria" mette in una certa categoria (il valore predefinito è Misc. Alla fine).
A proposito, non avete specificato una lingua o ambiente, in modo che il potrebbe essere necessario sopra per essere modificato se non è C # in Visual Studio 2005 +.
Altri suggerimenti
Io di solito uso questo schema, per creare un evento personalizzato in controlli utente:
#region MyEvent CUSTOM EVENT
protected virtual void OnMyEvent(MyEventEventArgs e)
{
if (MyEvent != null)
MyEvent(this, e);
}
public delegate void MyEventHandler(object sender, MyEventEventArgs e);
public event MyEventHandler MyEvent;
public class MyEventEventArgs : EventArgs
{
}
#endregion MyEvent CUSTOM EVENT
Questa ha la stessa convenzione di denominazione di eventi Microsoft, si può sparare OnMyEvent da dentro il vostro controllo, hanno EventArgs personalizzati, gestire MyEvent da altri controlli.
Si dovrebbe essere l'uso delegato al controllo utente e sollevarlo a pagina principale (pagina aspx) .Se questo modo non ha funzionato, si deve fare attenzione quando il registro UserControlID.It deve differiscono con altri UserControl.Each UserControl bisogno di un ID.