[C#] Gestion d'evenements
Bonjour, j'ai créé une classe composant, qui hérite de TextBox
Code:
public class clsTextBox : TextBox
dans laquelle j'ai créé un evenement :
Code:
public event EventHandler TextChecked;
EventHandler étant un délégué fournit par le FrameWork .NET
Code:
public delegate void EventHandler(Object sender, EventArgs e);
Ensuite je déclenche cet evenement à partir de
Code:
1 2 3 4 5 6 7 8 9 10 11
| private void clsTextBox_TextChanged(object sender, System.EventArgs e)
{
try
{
// déclencher l'event
this.TextChecked(sender,e);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
} |
Jusque là tout vas bien.
Cependant lors de l'utilisation de ce composant, via code :
Code:
Form01.myclsTextBox1.text="TOTO"
l'erreur System.NullReferenceException: Object reference not set to an instance of an object se produit lorsque je déclenche l'evenement.
MAIS quand je saisi une valeur directement dans le controle, tout ce passe bien.
J'ai remarqué que si j'ajoute une gestion de l'evenement dans la form01 même vide, l'erreur ne se produit pas :
Code:
1 2 3 4
| private void myclsTextBox1_TextChecked(object sender, System.EventArgs e)
{
} |
Ce qui voudrait dire qu'il m'est impossible de déclencher un evenement si aucune gestion ou liaison de cet evenement existe sur form01 ???? Là je comprends plus rien moa !! 8O
Question : Doit-on OBLIGATOIREMENT avoir une gestion d'évenement ou un evenement peut il être déclenché dans le "vide" ?
Merci d'avance !
Re: [C#] Gestion d'evenements
Citation:
Envoyé par sygale
Question : Doit-on OBLIGATOIREMENT avoir une gestion d'évenement
Non.
Citation:
Envoyé par sygale
ou un evenement peut il être déclenché dans le "vide" ?
Non plus. Mais tu peux faire
Code:
if ( this.TextChecked != null )
avant de lancer :)
Re: [C#] Gestion d'evenements
Citation:
Envoyé par Maniak
Non plus. Mais tu peux faire
Code:
1 2
|
if ( this.TextChecked != null ) |
avant de lancer :)
Si je ne m'abuse, c'est même ce qu'il est conseillé de faire (cf. exemples MSDN, Piotrek va surement passer pour fournir le lien exact...)
Re: [C#] Gestion d'evenements
Citation:
Envoyé par Keihilin
Si je ne m'abuse, c'est même ce qu'il est conseillé de faire
Bah disons qu'il n'y a pas trop le choix. Soit on teste avant de lancer, soit on met systématiquement un gestionnaire. C'est a priori ce qui est fait pour les contrôles web, sauf erreur, ils ont tous une méthode correspondant à chaque événement. Ça simplifie aussi la gestion des événements dans les classes dérivées, il suffit de faire un override, pas besoin de rattacher un gestionnaire d'événement à chaque fois :)
Ça si je ne m'abuse (chacun son tour :) c'est ce qu'il est conseillé pour les classes dérivées, justement.
Re: [C#] Gestion d'evenements
Citation:
Envoyé par Maniak
Mais tu peux faire
Code:
if ( this.TextChecked != null )
avant de lancer :)
Excellent, cela fonctionne d'enfer.
QUESTION
Si je comprend bien le truc en fait
Code:
if ( this.TextChecked != null )
sert de test pour savoir si un gestionnaire d'evenement est présent ou absent ?.
Merci pour tout !
Re: [C#] Gestion d'evenements
Citation:
Envoyé par sygale
Si je comprend bien le truc en fait
Code:
if ( this.TextChecked != null )
sert de test pour savoir si un gestionnaire d'evenement est présent ou absent ?.
Yup, c'est pile poil tout à fait exactement totalement complètement parfaitement ça :)