2017-08-28 73 views
0

我試圖從不同的類訪問文本框的值。該文本框winform1.cs存在,我想訪問他們testing.cs值始終爲空

在我已經實例化winform1 wf = new winform1(); testing.cs的頂部,讓我看到智能感知的文本框,但如果我鍵入

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

我得到一個空引用異常 - 如果我利用立即窗口並鍵入wf.txtfname.Text它返回"" - 文本框的修飾符被設置爲public。

我需要更改哪些內容以便我可以從不同的類中捕獲這些文本框的值?

如果它的確與衆不同,我試圖與方法來顯示值被聲明爲

protected override void() 

這句法從designer.cs兩個文本框

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

當您執行'winform1 wf = new winform1();'時,該窗口已經打開; – Guilherme

+0

是的 - 當我執行上述語法時,winform已經打開。 – BellHopByDayAmetuerCoderByNigh

+0

你需要看什麼文本框的刪除?我有一個_Leave()事件給他們,但就是這樣。 – BellHopByDayAmetuerCoderByNigh

回答

1

這是因爲您正在訪問表單的其他實例,而不是可見的實例。請注意,如果你這樣做

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

它會顯示您獲得這些值的實際形式。

您需要獲取正確的對象實例才能使用它。也許,如果你不打算打開該窗口的另一個實例,你可以創建一個靜態屬性來保存引用。

  1. 戴上了winform1類中:

    public static winform1 MainInstance { get; set; } 
    
  2. 把該winform1類的構造函數中

    MainInstance = this; 
    
  3. 現在,這樣的訪問:

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

如果MainInstance = this;在InitializeComponents()之上或之下進行操作;? – BellHopByDayAmetuerCoderByNigh

+0

我不認爲這應該有所作爲,但要放在下面。 – Guilherme

+0

仍然在返回「」 – BellHopByDayAmetuerCoderByNigh