我有一個Windows窗體應用程序。主表單有一個文本框和一個用於啓動另一個表單的按鈕。當其他表單啓動時,兩個表單都在屏幕上(但啓動的表單是模式的)。子窗體有一個文本框和按鈕,當按下按鈕時,我希望主窗體(父窗體)上的文本框使用子窗體上的文本框中的值進行更新。更新mainform上的文本框與從主窗體啓動的子窗體上的變量
這個功能是如何實現的?
我有一個Windows窗體應用程序。主表單有一個文本框和一個用於啓動另一個表單的按鈕。當其他表單啓動時,兩個表單都在屏幕上(但啓動的表單是模式的)。子窗體有一個文本框和按鈕,當按下按鈕時,我希望主窗體(父窗體)上的文本框使用子窗體上的文本框中的值進行更新。更新mainform上的文本框與從主窗體啓動的子窗體上的變量
這個功能是如何實現的?
當按下按鈕關閉已啓動的窗體時,返回到主窗體 - 啓動窗體的文本框仍在範圍內。
關閉窗體只是改變對象的狀態,而不是處理它。所以在按鈕事件處理程序中,從主窗體啓動窗體,下一行啓動模態窗口後,它可以從其啓動的對象中訪問文本,因爲文本框是該窗體對象的子項。除非你在另一個線程中啓動你的模態窗口,我不認爲你是模態的,因爲它是模態的,當它被關閉時,它應該到達啓動它的按鈕事件處理程序的下一行。
您的主要形式可能有代碼這樣的事情現在(還沒有這樣做的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;
如果單擊該按鈕時子窗體關閉,則可以將公用屬性將文本框的值包裝在子窗體上。然後主窗體可以在調用ShowDialog後讀取該屬性。
如果您希望在不關閉子窗體的情況下發生這種情況,您可以在主窗體上創建一個功能來更改文本框。然後,子表單會調用該函數。
理想情況下,你想保持從依賴於對方兩種形式,這可能與接口實現:
public interface IMainView
{
public void UpdateValue(string val);
}
public interface IChildView
{
public void Show(IMainView parent);
}
有你的主要形式實施IMainView和孩子實施IChildView,父稱child.show (this)和孩子調用parent.UpdateValue(blah);
希望這會有所幫助。
實現這種情況的最佳方法是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;
}
我沒編譯代碼;所以可能有錯誤:)
}
事件添加到窗體類。 – 2010-08-23 13:19:31