2017-08-28 8 views
0

Ich versuche, auf die Werte von Textfeldern aus einer anderen Klasse zuzugreifen. Die Textfelder existieren in winform1.cs und ich möchte, dass sie den Zugriff auf in testing.csWerte immer Null

An der Spitze der testing.cs ich winform1 wf = new winform1(); instanziiert haben, die mir die Textfelder mit Intellisense sehen können, aber wenn ich tippe

Messagebox.Show(wf.txtfname.Text); 
Messagebox.Show(wf.txtlname.Text); 

ich erhalte eine Nullreferenz Ausnahme - wenn ich das sofortige Fenster verwenden und geben sie wf.txtfname.Text es gibt "" - die Modifikatoren für die Textfelder sind zu öffentlichen gesetzt.

Was muss ich ändern, damit ich den Wert dieser Textfelder aus einer anderen Klasse erfassen kann?

wenn es einen Unterschied macht, auf die Methode, die ich versucht bin, die Werte zu zeigen, in wie

deklariert
protected override void() 

Dies ist Syntax von designer.cs für die beiden Textfelder

public System.Windows.Forms.TextBox txtfname; 
public System.Windows.Forms.TextBox txtlname; 
+0

Dieses Fenster ist bereits geöffnet, wenn Sie 'winform1 wf = new winform1();'? – Guilherme

+0

Ja - die Winform ist bereits geöffnet, wenn ich die obige Syntax mache. – BellHopByDayAmetuerCoderByNigh

+0

Welche Textbox-Deklarationen müssen Sie sehen? Ich habe ein _Leave() Ereignis für sie, aber das ist es. – BellHopByDayAmetuerCoderByNigh

Antwort

1

Diese liegt daran, dass Sie auf eine andere Instanz des Formulars zugreifen, nicht auf das sichtbare Formular. Beachten Sie, dass wenn Sie das tun

winform1 wf = new winform1(); 
wf.Show(); 

Es wird die tatsächliche Form, dass Sie diese Werte erhalten zeigen.

Sie müssen die richtige Objektinstanz verwenden, um diese zu verwenden. Wenn Sie nicht beabsichtigen, eine andere Instanz dieses Fensters zu öffnen, können Sie möglicherweise eine statische Eigenschaft erstellen, die den Verweis enthält.

  1. Put, dass innerhalb der winform1 Klasse:

    public static winform1 MainInstance { get; set; } 
    
  2. Setzen Sie, dass in den Konstruktor der winform1 Klasse

    MainInstance = this; 
    
  3. nun Zugang wie folgt aus:

    Messagebox.Show(winform1.MainInstance.txtfname.Text); 
    Messagebox.Show(winform1.MainInstance.txtlname.Text); 
    
+0

Sollte die MainInstance = this; gehe über oder unter die InitializeComponents();? – BellHopByDayAmetuerCoderByNigh

+0

Ich glaube nicht, dass das einen Unterschied machen sollte, aber lasst mich brüllen. – Guilherme

+0

wird immernoch zurückgegeben "" – BellHopByDayAmetuerCoderByNigh