2013-03-11 105 views
1

我的項目中有兩種形式,一種是按鈕,另一種是使用兩個文本框。 當我點擊第一個表單按鈕時,我想在另一個表格中填寫文本框。從另一個表格填充

代碼:

secondForm secondForm = new secondForm(); 
secondForm.MdiParent = this.MdiParent; 
secondForm.fillForm("String"); 

if (formShown != true) 
{ 
    secondForm.Show(); 
    formShown = true; 
} 
else 
{ 
    Application.OpenForms[secondForm.Name].Focus(); 
} 

public void fillForm(string text) 
{ 
    if (String.IsNullOrEmpty(priceText1.Text)) 
    { 
     priceText1.Text = text; 
    } 
    else 
    { 
     priceText2.Text = text; 
    } 
} 

看起來簡單,但是當我點擊按鈕第二時間,其在第二形式的文本框不檢測文本和在TextBox1中輸入數據,而不是TextBox2中的,爲什麼?

回答

1

問題是,當您第二次單擊該按鈕時,您正在創建表單的第二個實例,然後只是沒有顯示它(您將重點放在第一個實例上)。你應該重構程序,以免你這樣做。

private secondform secondform = null; 

private void Foo() 
{ 
    if(secondForm == null) 
    { 
     secondForm = new secondForm(); 
     secondForm.MdiParent = this.MdiParent; 
     secondForm.Show(); 
    } 

    secondForm.fillForm("String"); 

    secondForm.Focus(); 
} 

因此,如果我們不已經有一個新的實例只被創建的時候,填寫每一次數據,然後集中的形式。

P.S.第一次對錶格進行聚焦沒有任何問題,所以我只是在if結束後將其留下。如果有什麼事情只有在我們第一次可以將else添加到if並將代碼放在那裏時纔會發生。

P.S.S. secondForm沒有遵循類的名稱的標準命名約定。類名應以大寫字母開頭,即SecondForm。在其他問題中,這消除了關於secondForm是否引用該類型或該類型的實例的含糊性。

P.S.S.S.在你的情況下可能不需要功能,但是我們可能需要正確處理子窗體關閉的情況,然後再次單擊該按鈕。處理這種情況的最簡單方法是在表單關閉時清除secondForm實例字段(如果發生此情況,則在下次單擊該按鈕時創建新的實例字段)。關閉使這真的很容易,我們只需在secondForm.Show();之前添加此行:

secondform.FormClosed += (s, arg) => secondform = null; 
+0

謝謝你,很完美的答案! – MyMomSaysIamSpecial 2013-03-11 21:29:37