Entwickler-Ecke

WinForms - Object reference not set to an instance of an object


code19 - So 08.02.09 13:02
Titel: Object reference not set to an instance of an object
Hallo

Ich versuche seit Paar Tagen zu entdecken, wo mein Fehler liegt, komme leider von selber nicht drauf :(

Das untere Beispiel habe ich in meinem Programm öfters verwendet, was prima funktioniert hatte, ausser bei dieser Stelle:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public void saveToData()
{
     Form formSave = new FormSave();
     formSave.StartPosition = FormStartPosition.CenterScreen;
       
     formSave.Controls["textBox3"].Text = "";  // hier liegt der Fehler
     formSave.Show(this);
}

An der kommentierten Stelle bekomme ich ständig den Hinweis Object reference not set to an instance of an object
Wie gesagt, ähnliche Beispiel habe ich erfolgreich durchgeführt, nur hier blockt es komischer Weise

kann mir bitte jemand sagen, was ich da falsch mache und wie ich es korrigiere

Danke


Kha - So 08.02.09 13:44

Dann hat die Form wohl kein (direktes) Kind namens "textBox3" :nixweiss: . Die ganzen Zuweisungen sollten aber eher in den Konstruktor von FormSave (bzw. warum nicht direkt im Designer festlegen?), dann musst du erst gar nicht das Control suchen.


code19 - So 08.02.09 14:03

Danke dir Kha für die schnelle Antwort

Ich habe davor die eine Möglichkeit probiert und da hat es funzt

In "FormSave" hatte ich einen splittContainer, in dem mein TextBox3 lag. Kaum setzte ich das TextBox ausserhalb, hat es geklappt :?

Zitat:
Dann hat die Form wohl kein (direktes) Kind namens "textBox3"

Da hast du wohl recht, obwohl ich den Unterschied nicht verstehe, warum C# dies so differenziert (mit direktem und undirektem Kind).

Danke :)


Kha - So 08.02.09 15:20

user profile iconcode19 hat folgendes geschrieben Zum zitierten Posting springen:
Da hast du wohl recht, obwohl ich den Unterschied nicht verstehe, warum C# dies so differenziert (mit direktem und undirektem Kind).
Delphi macht das auch nicht anders :) . Dafür gibt es dann eben FindComponent, das die gesamte Hierarchie durchläuft - und unter .Net heißt es Controls.Find. Wäre hier (und quasi überall sonst) aber wie gesagt fehl am Platze.