Autor Beitrag
Megatrash
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 06.04.15 14:05 
Ich würde gerne ein eigenes Event verwenden. Leider scheitre ich schon am Anfang.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    public partial class MainWindow : Window
    {
        public delegate void NewPatientSelectedEventHandler(int DataID);
        public event NewPatientSelectedEventHandler NewDataSelected;

        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            NewDataSelected(1);
        }
    }


Hier kommt die Fehlermeldung:
System.NullReferenceException wurde nicht von Benutzercode behandelt.
HResult=-2147467261
Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Megatrash Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 06.04.15 14:18 
Ich habe es :D

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public delegate void NewDataSelectedEventHandler(int CurrentID);
        public event NewDataSelectedEventHandler NewDataSelected;

        public MainWindow()
        {
            InitializeComponent();
            NewDataSelected += new NewDataSelectedEventHandler(Message);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            NewDataSelected(1);
        }

        private void Message(int CurrentID)
        {
            MessageBox.Show(Convert.ToString(CurrentID));
        }
    }
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 06.04.15 14:52 
Einen eigenen Event zu fangen ist wohl eher sinnfrei?
Events werden üblicherweise von anderen Klassen registriert die diese Klasse verwenden daher weißt du üblicherweise nicht ob an deinem Event (z.B. NewDataSelected) jemand lauscht oder nicht. Wen niemand lauscht ist der Event null. Ergo immer prüfen ob der Event null ist bevor man ihn feuert.
Für eine gutes Design das sich insbesondere Erwartungskonform verhält lohnt sich immer ein Blick in die Design Guidlines des .Net Frameworks.
Megatrash Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 06.04.15 15:04 
Hallo,

ja natürlich hast Du Recht. Ich habe den Code jedoch nur dazu verwendet um ein wenig zu testen.

Als ich den Code in eine eigene Klasse eingebunden habe, ist mir aufgefallen, dass es wieder zu der Fehlermeldung kommt, wenn ich das Ereignis im Konstruktor abonniere. Sobald ich dies z. B. in "Window_Loaded" tue, funktioniert dies einwandfrei. Natürlich ist der Aufruf c.Raise(); nur zum Test :wink:

ausblenden volle Höhe C#-Quelltext
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:
31:
32:
33:
34:
35:
36:
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

       
        public MainWindow()
        {
            InitializeComponent();
           
        }

        private void Message(int CurrentID)
        {
            MessageBox.Show(Convert.ToString(CurrentID));
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
             Class1 c = new Class1();
             c.NewDataSelected += new Class1.NewDataSelectedEventHandler(Message);
             c.Raise();
        }
    }

    class Class1
    {
        public delegate void NewDataSelectedEventHandler(int CurrentID);
        public event NewDataSelectedEventHandler NewDataSelected;

        public void Raise()
        {
            NewDataSelected(1);
        }
    }