如何将textbox.text从一个子窗体更改为其他子窗体。两者都在C#.net中以MDI格式打开

时间:2013-06-23 09:04:38

标签: c# .net mdichild mdiparent

我有一个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都是子窗体)

此致 塞利勒

1 个答案:

答案 0 :(得分:0)

尝试使用MDI父级(MDIParent1)作为两种形式之间的主持人 MDIParent1将注册Form1的事件,并将分别修改Form2。

Form1

的修改

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

对MDIParent1的修改

在以下代码中,修改是注册事件并处理它:

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

    }

对Form2的修改

修改是添加用于设置文本的公共方法:

 public void SetText(string text)
    {
        this.textbox2.Text = text;
    }

这对你有用......