如何在C#中从子窗口访问和更改父窗口控件的值

时间:2010-11-11 23:48:38

标签: c# controls parent

您好 如何从子窗口更改父窗口中文本框的文本值..

即我有父窗口有textbox1和按钮,子窗口有textbox2和按钮。 当我在子窗口的textbox2中输入一些文本时,我需要更新textbox1的值。

我做了一些简单的功能,逻辑上做到这一点正确,但它不起作用我不明白为什么..

parent.cs

namespace digdog
{
    public partial class parent : Form
    {
        public parent()
        {
            InitializeComponent();
        }

        public void changeText(string text)
        {
            textbox1.Text = text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Display modal dialog
            child myform = new child();
            myform.ShowDialog();

        }

    }
}

child.cs

namespace digdog
{
    public partial class child : Form
    {

        public child()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
         parent mytexts = new parent();
         mytexts.changeText(textbox2.Text);
        }
    }
}

任何想法将不胜感激 提前谢谢

3 个答案:

答案 0 :(得分:3)

您正在创建另一个“父级”窗口(不可见)并更改其文本。孩子需要访问“真正的”父母。您可以通过父项button1_click中设置的子项上的属性来执行此操作。

e.g。

在儿童班

public parent ParentWindow {get;set;}
在父按钮1中单击

child myform = new child();
child.ParentWindow = this;
m.ShowDialog();
在子按钮1中单击

ParentWindow.changeText(textbox2.Text)

答案 1 :(得分:3)

不要创建新的父级。引用表单本身的父级。

    private void button1_Click(object sender, EventArgs e)
    {
        parent mytexts = this.Parent as parent;
        mytexts.changeText(textbox2.Text);
    }

这就是你第一次创建孩子的方式:

    private void button1_Click(object sender, EventArgs e)
    {
        //Display modal dialog
        child myform = new child();
        myform.ShowDialog(this);  // make this form the parent
    }

答案 2 :(得分:3)

或简单: 在ParentWindow中

ChildWindow child = new ChildWindow(); 
child.Owner = this;
child.ShowDialog();
子窗口中的

this.Owner.Title = "Change";

这很酷#