2015-12-02 194 views
-1

我有一個包含按鈕和一些子窗體的Mdiparent窗體。 單擊父窗體中的按鈕時,如何更改所有子窗體中所有文本框的背景顏色?如何更改父窗體中子窗體控件的屬性

+0

使所有的文本框的子窗體,並通過調用父子窗體訪問公開。 – Irshad

+0

我應該單獨調用每個文本框? – Behnam

+0

用子表單編寫方法並調用它。那麼不需要爲文本框設置「public」修飾符。 – Irshad

回答

1

這個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

2

我知道答案已經給出..但我會用事件和代表去.. 多點傳送代表是最好的選擇是在這裏 所以這裏是我的解決方案。

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; 
     } 
    } 


} 
相關問題