2017-03-04 76 views
0

我的問題是: 主窗體首先打開,有一個按鈕打開子窗體。我使用的構造,我想從孩子形式的字符串返回主窗體的文本框,現在我的代碼是:如何從子窗體返回一個字符串到主窗體(不打開任何新窗體)?

Form1 f = new Form1(txt1.Text); 
f.Show(); 

但是,一個新的主要形式將打開,該字符串不會在填第一主要形式。 那麼如何使用只有一個主要的形式?

+0

你的問題不是很清楚,我不知道你想做什麼。單擊按鈕時應該發生什麼,以及該字符串何時應該填充在主窗體上? – smead

+0

對不起,我仍然困惑。你說你想要2種形式,但是你不想打開一個表格?這些似乎是相反的事情。對不起,但我不明白你在問什麼。 – smead

+0

由於Form1已經打開,我想從Form2直接添加一個字符串到該Form1,而不是打開一個新窗體並將字符串添加到它 – Nlive

回答

0

你可以做到這一點,通過OpenForms得到它:

Form1 frm = Application.OpenForms.OfType<Form1>().FirstOrDefault(); 

請務必在其修改財產申報你的控制TXT1爲公有的,因此你可以從孩子的形式訪問:

 Form1 frm = Application.OpenForms.OfType<Form1>().FirstOrDefault(); 
     frm.txt1.Text = "Change"; 
     frm.Show(); 

現在如果你想通過它的構造函數改變它,我懷疑你可以做它,因爲它已經被初始化了,除非你調用另一個新的Form1來初始化它,並且會再次通過它的構造函數。

你可以做的是直接改變其屬性:

 Form1 frm = Application.OpenForms.OfType<Form1>().FirstOrDefault(); 
     frm.stringMain = "Foo"; //Your property you want to change 
     frm.txt1.Text = "Change"; 
     frm.Show(); 
+0

還是不明白你的代碼。我已經將Form1中的標籤的屬性從私有公共設置爲公共,所以現在我可以擁有這個: **'frm.mylabel.Text = MyString; '** – Nlive

+0

是的。你遇到什麼錯誤? @Nlive –

+0

你真的想通過構造函數傳遞值嗎?那麼你不能在Form1上訪問它,因爲它已經打開了,除非你想打開一個新的Form1?讓我知道,以便我可以編輯我的代碼。 @Nlive –

相關問題