2017-05-08 50 views
-1

我有Parent_1,Parent_2,Parent_3等,並有一個孩子形式Parent_1,Parent_2,Parent_3C#很多家長形成了一個孩子

...我有:

private string strText; 
public string pubText { 
get { return strText; } 
set { strText = value; } } 
按鈕

private void btbutton1_Click(object sender, EventArgs e) 
     { 
      var form = new fChild(this); 
      form.ShowDialog(); 
     } 
在子窗體

我的代碼:

private Parent_1 logicalParent; 
public fChild(Parent_1 parent) 
{ 
    InitializeComponent(); 
    logicalParent = parent; 
    this.FormClosed += new FormClosedEventHandler(child_FormClosed); 
} 

void child_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    logicalParent.pubText = this.textBox1.Text; 
} 

這僅適用於1個父窗體,我如何使用這個爲父形式??? 請幫助

+1

什麼是最接近的比喻ŧ o表示層次結構? 'MessageBox'對話框?然後,您不應將「Parent_1」類型傳遞給子代,而應將所有父代的一些基類型傳遞給子代。也許'Form'會做,除非你必須施放太多,然後考慮使用接口/基類型。 – Sinatr

+0

使用'private Parent_1 logicalParent;'代替'private Form logicalParent;'並設置屬性使用GetType()並設置值!或者你可以爲所有父窗體使用一個通用接口,並在接口中保留'pubText'的屬性! – Vandita

回答

1

您可以創建三個父形式的通用接口:

public interface IParentForm 
{ 
    string PubText {get; set;} 
} 

public class Parent_1 : Form, IParentForm 
{ 
    public string PubText 
    { 
     get { return this.pubText; } 
     set { this.pubText = value; } 
    } 
} 

//same for Parent_2 and 3 

然後在子窗體聲明logicalParentIParentForm類型,並更改子窗體的構造函數是public fChild(IParentForm parent)

+1

將子部件與子構造函數包含在一起會很好。由於這是原因,爲什麼OP要問這個問題 –

+0

你能告訴我 - var form = new fChild();在裏面「()」 –

+0

@DavidMamulashvili你應該仍然可以使用'var form = new fChild(this)'如果你的父窗體實現了'IParentForm' – KMoussa

1

在點擊按鈕執行以下操作:

private void btbutton1_Click(object sender, EventArgs e) 
    { 
     var form = new fChild(this); // this is not more needed 
     form.ShowDialog(); 
     pubText = form.pubText; 
    } 
+0

這隻適用於一位家長。我想要從兒童到父母的字符串 –