-1

我有一个 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 的按钮时,相同的文本将写入 Form2 的 Textbox2 中。

我尝试了很多。但是 Dosnt 得到输出。这些值通过一个子窗体传递给另一个子窗体。但 Textbox.text 属性没有更新。

我试过没有 MDI 表单。Form1 和 Form2 将独立打开。每次单击 Form1 的按钮时,我都必须关闭并重新打开 Form2。它有点作用。但我需要它在 MDI 表单中。虽然两个子窗体都在 MDI 中打开,然后我想更新文本框的属性(简而言之,我需要这样做 form2.textbox.text = Form1.textbox.text 其中 Form1 和 Form2 都是子窗体)

问候, 萨利尔

4

1 回答 1

0

尝试使用 MDI 父 (MDIParent1) 作为 2 个表单之间的主持人。
MDIParent1 将注册到 Form1 的事件并分别修改 Form2。

Form1 的修改

向 Form1 添加一个公共事件,通知按钮被按下。该事件还应包含有关 textBox1 中当前文本的信息。为此,请使用派生自 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;
    }

这应该对你有用......

于 2013-06-23T10:51:52.933 回答