Entwickler-Ecke

WinForms - Objektverweis wurde nicht auf eine Objektinstanz festgelegt


Csharp-programmierer - So 20.03.16 12:50
Titel: Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Hallo meine lieben.
Ich habe mal wieder ein Problem. Unszwar habe ich eine Klasse HTML und eine Klasse mit einer Form Tags. Die Klass Tags bedient sozusagen die Klasse Tags.

Hier die KLasse HTML:

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:
37:
38:
39:
40:
41:
public class HTML
    {
        public List<string> html { get; set; }

        public HTML()
        {
            html = new List<string>();
        }

        public void Speichern(string Pfad)
        {
            try
            {
                using (FileStream file = new FileStream(Pfad, FileMode.Create))
                {
                    XmlSerializer s = new XmlSerializer(typeof(HTML));
                    s.Serialize(file, this);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public static HTML Laden(string Pfad)
        {
            try
            {
                using (FileStream file = new FileStream(Pfad, FileMode.Open))
                {
                    XmlSerializer s = new XmlSerializer(typeof(HTML));
                    return (HTML)s.Deserialize(file);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return null;
            }
        }
    }


Die KLasse Tags:

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:
HTML _html;

        public Tags()
        {
            InitializeComponent();
            _html = HTML.Laden(Path.Combine(io.pHTML, "Tags.xml"));
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (string s in _html.html)
            {
                MessageBox.Show(s);
                // Soll den Inhalt der Liste wiedergeben
            }
        }

        private void button33_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.comboBox1.SelectedIndex == 0)
                {
                    _path = Path.Combine(io.pHTML, "Tags.xml");
                    _html.html.Add("Hallo");
                }

                _html.Speichern(_path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


Immer, wenn ich auf eine Propertie von _html zugreifen möchte, kommt der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. Ich habe doch aber ein Objekt von HTML erzeugt. Aber warum kommt dann dieser Fehler?

Moderiert von user profile iconTh69: Titel geändert (war "Fehlermeldung")


Ralf Jansen - So 20.03.16 18:43

Zitat:
Immer, wenn ich auf eine Propertie von _html zugreifen möchte, kommt der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. Ich habe doch aber ein Objekt von HTML erzeugt. Aber warum kommt dann dieser Fehler?


Es wäre an der Zeit ein wenig Debugging zu üben. Wird den der Code der _html zuweist auch aufgerufen? Wenn du dir im Debugger die Stelle anschaust an der es knallt ist dann _html null oder die html Property von _html?


Csharp-programmierer - So 20.03.16 20:32

Also wenn ich der Liste etwas hinzufügen möchte (_html.html.Add("Text")) kommt der Fehler und wenn ich den Inhalt der Liste abrufen möchte. Es wird aber gesagt, dass die XML Datei nicht gefunden werden kann. Liegt es vielleicht daran? Aber über die Speichern Methode müsste ja eigentlich die Datei erstellt werden

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Mo 21.03.16 10:43

Also den Debugger sollte man zu bedienen wissen, s. z.B. [Artikel] Debugger: Wie verwende ich den von Visual Studio? [http://www.mycsharp.de/wbb2/thread.php?threadid=109261]

Wenn also die Fehlermeldung erscheint, welchen Wert gibst du dann in der Methode Laden zurück?!!

PS: Die eigentliche Fehlermeldung ist eine NullReferenceException...
Und diese ist immer ein Programmierfehler - jeder Zugriff auf ein null-Objekt muß vorher abgefangen werden!


Csharp-programmierer - Di 22.03.16 20:36

Ich habe jetzt eine Bestätigung, dass das Objekt HTML null ist. Ich denke aber man kann diesem Objekt dann trotzdem etwas zuweisen?


Christian S. - Di 22.03.16 20:40

HTML ist eine Klasse und kann nicht null sein.

Meinst Du _html? Wenn das auch nach dem Konstruktor von Tags noch null ist, solltest Du mal in der Laden-Methode von HTML debuggen, warum die nicht das tut, was sie soll.