Prob avec evenements personalisés
Bonjour,
Je n'arrive pas faire fonctionner un évènement perso. J'ai parcouru MSDN et développez.com mais je dois louper quelques chose.
J'ai une classe pour les arguments de mon évènement
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
public enum Messagetype
{
Information,
Warning,
Error
}
public class MessageEventArgs: EventArgs
{
private string message = string.Empty;
private Messagetype type = Messagetype.Information;
public string Message
{
get{ return this.message;}
}
public Messagetype Type
{
get{ return this.type;}
}
public MessageEventArgs(string Message, Messagetype Type)
{
this.message = Message;
this.type = Type;
}
} |
Un délégué
Code:
public delegate void MessageEventHandler(object sender, MessageEventArgs e);
Une classe émettrice
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class Datasource
{
....
public event MessageEventHandler Message;
protected void OnMessage(MessageEventArgs e)
{
MessageEventHandler handler = Message;
if (handler != null)
{
handler(this, e);
}
}
public Datasource()
{}
public void Create()
{
MessageEventArgs e = new MessageEventArgs( "Datasource doesn't exist",Messagetype.Error);
OnMessage(e);
} |
Mon consommateur est la code behind d'une page aspx
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public partial class DatasourceBuilder : System.Web.UI.Page
{
private Datasource datasource = new Datasource();
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.datasource.Message += new MessageEventHandler(DatasourceOnMessage);
}
private void DatasourceOnMessage(object sender, MessageEventArgs e)
{
ModalPopupExtender popModalMessage = new ModalPopupExtender()
{
TargetControlID = "Wizard1",
PopupControlID = "panMessage",
OkControlID = "btnOk",
PopupDragHandleControlID = "panMessage",
BackgroundCssClass = "modalBackground",
};
this.Page.Controls.Add(popModalMessage);
this.lblModalTitle.Text = ((MessageEventArgs)e).Type.ToString();
this.lblModalMessage.Text = ((MessageEventArgs)e).Message;
popModalMessage.Show();
}
} |
Le problème que je rencontre est NullReferenceException. Normalement cette erreur survient quand le gestionnaire (handler) n'a aucun abonné (subscriber) mais avec cette ligne
Code:
this.datasource.Message += new MessageEventHandler(DatasourceOnMessage);
je devrais être abonné.
Je ne comprend pas mon erreur.
Pouvez vous m'éclairer ?