0

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

4

3 回答 3

1

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

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

于 2012-05-23T14:56:22.843 回答
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);
        }
    }
}
于 2012-05-23T15:01:55.393 回答
0

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

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

于 2012-05-23T15:02:36.117 回答