我有一个MDI表单,有两个名为MDIParent1,Form1,Form2的子表单。 MDI将加载显示/加载这两个子表单。
private void MDIParent1_Load(object sender, EventArgs e)
{
Form childForm1 = new Form1();
childForm1.MdiParent = this;
childForm1.Show();
Form childForm2 = new Form2();
childForm2.MdiParent = this;
childForm2.Show();
}
在Form1中有一个textbox1和一个Button。在form2中有textbox2。 所以我想要的是当我在Form1的Textbox1中写一些文本然后单击Form1的Button时,同样的文本将写在Form2的Textbox2中。
我经常尝试。但是Dosnt获得了输出。值通过一个子表单传递给另一个子表单。但Textbox.text属性未更新。
我在没有MDI表格的情况下尝试过。 Form1和Form2将独立开放。每当我点击Form1的按钮时,我必须关闭并重新打开Form2。它有点工作。但我需要MDI表格。虽然两个子窗体都在MDI中打开,然后我想更新文本框的属性(简而言之,我需要这样做form2.textbox.text = Form1.textbox.text,其中Form1和Form2都是子窗体)
此致 塞利勒
答案 0 :(得分:0)
尝试使用MDI父级(MDIParent1)作为两种形式之间的主持人 MDIParent1将注册Form1的事件,并将分别修改Form2。
向Form1添加一个公共事件,通知按钮已被按下。该事件还应包含有关textBox1中当前文本的信息。为此,请使用从EventArgs派生的类:
EventArgs :
public class TextChangedArgs:EventArgs
{
string _text;
/// <summary>
/// Gets text .
/// </summary>
/// <value>
/// The text.
/// </value>
public string Text
{
get { return _text; }
}
public TextChangedArgs(string text)
{
this._text = text;
}
}
公共活动:
public event EventHandler<TextChangedArgs> OnTextChanged;
Button1点击活动:
private void button1_Click(object sender, EventArgs e)
{
if (this.OnTextChanged != null)
{
this.OnTextChanged(this, new TextChangedArgs(this.textBox1.Text));
}
}
在以下代码中,修改是注册事件并处理它:
void MDIParent1_Load(object sender, EventArgs e)
{
Form1 childForm1 = new Form1();
childForm1.MdiParent = this;
childForm1.OnTextChanged += childForm1_OnTextChanged;
childForm1.Show();
Form2 childForm2 = new Form2();
childForm2.MdiParent = this;
childForm2.Show();
}
void childForm1_OnTextChanged(object sender, TextChangedArgs e)
{
//just getting the Form 2 instance, you can implement it in any way you choose to (e.g. make it global...)
Form2 childForm2 = this.MdiChildren.Where(c => c is Form2).FirstOrDefault() as Form2;
if (childForm2 != null)
{
childForm2.SetText(e.Text);
}
}
修改是添加用于设置文本的公共方法:
public void SetText(string text)
{
this.textbox2.Text = text;
}
这对你有用......