如何在两个表单之间传递文本框数据?

时间:2012-05-23 14:50:47

标签: c# winforms

如何通过按钮在没有Show()/ ShowDialog()的情况下将两个表单之间的文本框值发送到文本框? 我希望textBox在没有开放形式的情况下获得价值。

3 个答案:

答案 0 :(得分:1)

要访问您需要使用的文本框数据:textBox1.Text

表单是一个对象,因此您可以定义一个更新文本框值的方法(您可以使用公共访问器公开文本框本身)

答案 1 :(得分:1)

要将父项中的信息传递给子表单,您应该在子表单上为其需要接收的数据创建一个属性,然后让父表单设置该属性(例如,单击按钮时)。

要让子表单向父表单发送数据,子表单应该创建一个属性(它只需要是一个getter),并将其要发送到父表单的数据。然后它应该创建一个父级可以订阅的事件(或使用现有的Form事件)。

一个例子:

namespace PassingDataExample
{
    public partial class ParentForm : Form
    {
        public ParentForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ChildForm child = new ChildForm();
            child.DataFromParent = "hello world";

            child.FormSubmitted += (sender2, arg) =>
            {
                child.Close();

                string dataFromChild = child.DataFromChild;
            };

            child.Show();
        }
    }
}

namespace PassingDataExample
{
    public partial class ChildForm : Form
    {
        public ChildForm()
        {
            InitializeComponent();
        }

        public string DataFromParent { get; set; }

        public string DataFromChild { get; private set; }

        public event EventHandler FormSubmitted;

        private void button1_Click(object sender, EventArgs e)
        {
            DataFromChild = "Hi there!";

            if (FormSubmitted != null)
                FormSubmitted(this, null);
        }
    }
}

答案 2 :(得分:0)

我不知道你说“没有Show()/ ShowDialog()”究竟是什么意思,但这无论如何都不相关,或者我会在这里进一步假设你有两个窗口都打开(无关紧要)你是如何完成的。)

您希望避免两个表单之间的多少耦合,尤其是不像文本框等实现细节。您可以使用delegatesevents来触发两个表单之间的“发送”数据。然后,您可以轻松传递事件数据,而订阅的其他表单(或任何其他对象)实际上并不知道表单的确切实现细节,它只知道它将收到的数据通过代表(事件)。我不会在这里发布所有代码,因为已经在以下网址上对其进行了很好的解释:http://www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms