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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
public delegate void MessageEventHandler(object sender, MessageEventArgs e);
Une classe émettrice
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
this.datasource.Message += new MessageEventHandler(DatasourceOnMessage);
je devrais être abonné.
Je ne comprend pas mon erreur.

Pouvez vous m'éclairer ?