2010-08-23 83 views
1

我有一個Windows窗體應用程序。主表單有一個文本框和一個用於啓動另一個表單的按鈕。當其他表單啓動時,兩個表單都在屏幕上(但啓動的表單是模式的)。子窗體有一個文本框和按鈕,當按下按鈕時,我希望主窗體(父窗體)上的文本框使用子窗體上的文本框中的值進行更新。更新mainform上的文本框與從主窗體啓動的子窗體上的變量

這個功能是如何實現的?

+0

事件添加到窗體類。 – 2010-08-23 13:19:31

回答

1

當按下按鈕關閉已啓動的窗體時,返回到主窗體 - 啓動窗體的文本框仍在範圍內。

關閉窗體只是改變對象的狀態,而不是處理它。所以在按鈕事件處理程序中,從主窗體啓動窗體,下一行啓動模態窗口後,它可以從其啓動的對象中訪問文本,因爲文本框是該窗體對象的子項。除非你在另一個線程中啓動你的模態窗口,我不認爲你是模態的,因爲它是模態的,當它被關閉時,它應該到達啓動它的按鈕事件處理程序的下一行。

您的主要形式可能有代碼這樣的事情現在(還沒有這樣做的WinForms在一段時間如此忍受我,如果我錯過了什麼):

public void Button1_Click(object sender, ClickEventArgs e) 
{ 
    SomeFormIWantToLaunch launchForm = new SomeFormIWantToLaunch(); 
    launchForm.ShowDialog(this); 
} 

你需要後launchForm.ShowDialog(this);類似,只是增加:

this.SomeTextBox.Text = launchForm.ATextBox.Text; 
1

如果單擊該按鈕時子窗體關閉,則可以將公用屬性將文本框的值包裝在子窗體上。然後主窗體可以在調用ShowDialog後讀取該屬性。

如果您希望在不關閉子窗體的情況下發生這種情況,您可以在主窗體上創建一個功能來更改文本框。然後,子表單會調用該函數。

2

理想情況下,你想保持從依賴於對方兩種形式,這可能與接口實現:

public interface IMainView 
{ 
    public void UpdateValue(string val); 
} 

public interface IChildView 
{ 
    public void Show(IMainView parent); 
} 

有你的主要形式實施IMainView和孩子實施IChildView,父稱child.show (this)和孩子調用parent.UpdateValue(blah);

希望這會有所幫助。

1

實現這種情況的最佳方法是clockWize和Hans Passants的建議。 但那呢?

爲您的文本框寫一個屬性窗體,像這樣。

public string TextBoxText 
{ 
get { return txtTextBox.Text;} 
set { txtTextBox.Text = value;} 
} 

當您打開子窗體設置所有者。

ChildForm f = new ChildForm(); 
f.Owner = this; 
f.Show(); 

創建一個事件處理子窗體按鈕單擊事件

public Button1_Click(object sender; EventArgs e) 
{ 
ParentForm f = (ParentForm)this.Owner; 
f.TextBoxText = txtChildTextBox.Text; 
} 

我沒編譯代碼;所以可能有錯誤:)

}

相關問題