如何更改父窗体中子窗体控件的属性
答
这个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;
}
}
}
使所有的文本框的子窗体,并通过调用父子窗体访问公开。 – Irshad
我应该单独调用每个文本框? – Behnam
用子表单编写方法并调用它。那么不需要为文本框设置“public”修饰符。 – Irshad