2017-05-08 47 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

这只适用于一位家长。我想要从儿童到父母的字符串 –