2015-12-02 2 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; 
     } 
    } 


} 
Смежные вопросы