2016-03-04 66 views
1

我已經看過各種答案,我已經在幾個小時內搜索了好幾個小時,但仍然無法得到這個工作。 我正在嘗試更新窗體上的文本框。我簡化了我正在使用的代碼,希望它只是我不必要地添加的內容,但仍然無法使其工作。 我知道文本正在傳遞給文本框並存儲在框中,但它不會顯示在實際框中。從另一個表單更新文本框。 C#

In form one(Form_DMM);

private void BtnTest_Click(object sender, EventArgs e) 
{ 
    ErrorHandling EH = new ErrorHandling(); 
    EH.updatetbtest(); 
} 

in separate class;

public void updatetbtest() 
    { 
     string FailedMessagePB = "Test Message" + "\n"; 
     Form_DMM FormDMM = new Form_DMM(); 
     FormDMM.TextBoxAppend(FailedMessagePB); 
     FormDMM.TextBoxAppend2 = FailedMessagePB; 
     FormDMM = null; 
    } 

傳回來組成一個;

public void TextBoxAppend(string WriteMessage) 
{ 
    TB_Issues.AppendText(WriteMessage + "\n"); 
    System.Windows.Forms.Application.DoEvents(); 
    TB_Issues.Invalidate(); 
    TB_Issues.Update(); 
    TB_Issues.Refresh(); 
    MessageBox.Show(TB_Issues.Text); 
} 

    public string TextBoxAppend2 
    { 
     get 
     { 
      return TB_Issues.Text; 
     } 
     set 
     { 
      TB_Issues.Text = TB_Issues.Text + value + "\n"; 
      System.Windows.Forms.Application.DoEvents(); 
      TB_Issues.Invalidate(); 
      TB_Issues.Update(); 
      TB_Issues.Refresh(); 

      MessageBox.Show(TB_Issues.Text); 
     } 

    } 

正如你可以看到我有在更新文本框,均未將在文本框中顯示所述測試消息兩個單獨的嘗試,但彈出將顯示測試消息在MessageBox。它甚至會顯示來自TB_Issues.AppendText()的雙重測試消息。

有人可以請幫助,並告訴我我要去哪裏錯了。這讓我瘋狂!

回答

2

你可以使用這樣

public void updatetbtest(Form_DMM FormDMM) 
    { 
     string FailedMessagePB = "Test Message" + "\n"; 
     FormDMM.TextBoxAppend(FailedMessagePB); 
     FormDMM.TextBoxAppend2 = FailedMessagePB; 
    } 

,並在您buttontest_Click

private void BtnTest_Click(object sender, EventArgs e) 
    { 
     ErrorHandling EH = new ErrorHandling(); 
     EH.updatetbtest(this); 
    } 
+0

YESYESYES !!!這會更新文本框!謝謝! – DDuffy

+1

這是因爲你每次都是新的實例。如果你想更新任何其他類或形式只是給參數..乾杯... –

1

從問題張貼的錯誤是在ErrorHandling中類。 在方法updatetbtest中,您創建了一個新的窗體對象Insance。因此,您創建一個單獨的表單對象,更改文本,然後您失去任何引用,因爲您將該變量設置爲null。顯示消息框是因爲調用了TextBoxAppend方法,並且消息框是一個單獨的實例。您創建的新實例從不顯示。

您必須將您的調用表單實例交給updatetbtest方法。

事情是這樣的:

private void BtnTest_Click(object sender, EventArgs e) 
{ 
    ErrorHandling EH = new ErrorHandling(); 
    EH.updatetbtest(this); 
} 


public void updatetbtest(Form_DMM form) 
{ 
    string FailedMessagePB = "Test Message" + "\n"; 
    form.TextBoxAppend(FailedMessagePB); 
} 
1

您嘗試創建新的形式。但你必須使用現有的。 你可以通過現有的表格調用EH.updatetbtest(this); 當然,增加參數聲明像updatetbtest(Form_DMM FormDMM)。並在函數體中刪除聲明和new。