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
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é
public delegate void MessageEventHandler(object sender, MessageEventArgs e);
Une classe émettrice
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
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
this.datasource.Message += new MessageEventHandler(DatasourceOnMessage);
je devrais être abonné.
Je ne comprend pas mon erreur.
Pouvez vous m'éclairer ?
Partager