如何更改父窗体中子窗体控件的属性

如何更改父窗体中子窗体控件的属性

问题描述:

我有一个包含按钮和一些子窗体的Mdiparent窗体。 单击父窗体中的按钮时,如何更改所有子窗体中所有文本框的背景颜色?如何更改父窗体中子窗体控件的属性

+0

使所有的文本框的子窗体,并通过调用父子窗体访问公开。 – Irshad

+0

我应该单独调用每个文本框? – Behnam

+0

用子表单编写方法并调用它。那么不需要为文本框设置“public”修饰符。 – Irshad

这个ChilForm;

 public ChilForm() 
     { 
      InitializeComponent(); 
     } 

     public void ChangeTextboxColor() 
     { 
      textBox1.BackColor = Color.Yellow; 
     } 

而这是Parent;

 ChilForm frm = new ChilForm(); 

     public Parent() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //Shows the child 
      frm.Show(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      //Changes color 
      frm.ChangeTextboxColor(); 
     } 
+1

尽管这会起作用,但它会要求您实例化所有子窗体并独立调用其方法。另一种方法是使用可观察模式或至少使用事件。 –

+0

是的,它的工作,谢谢伊尔沙德。 :) – Behnam

我知道答案已经给出..但我会用事件和代表去.. 多点传送代表是最好的选择是在这里 所以这里是我的解决方案。

namespace winMultiCastDelegate 
{ 
    public partial class Form1 : Form 
    { 
     public delegate void ChangeBackColorDelegate(Color backgroundColor); 

     //just avoid null check instanciate it with fake delegate. 
     public event ChangeBackColorDelegate ChangeBackColor = delegate { }; 
     public Form1() 
     { 
      InitializeComponent(); 


      //instanciate child form for N time.. just to simulate 
      for (int i = 0; i < 3; i++) 
      { 
       var childForm = new ChildForm(); 
       //subscribe parent event 
       this.ChangeBackColor += childForm.ChangeColor; 
       //show every form 
       childForm.Show(); 
      } 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      ChangeBackColor.Invoke(Color.Black); 
     } 
    } 
    /// <summary> 
    /// child form class having text box inside 
    /// </summary> 
    public class ChildForm : Form 
    { 
     private TextBox textBox; 
     public ChildForm() 
     { 

      textBox = new TextBox(); 
      textBox.Width = 200; 
      this.Controls.Add(textBox); 
     } 
     public void ChangeColor(Color color) 
     { 
      textBox.BackColor = color; 
     } 
    } 


}