如何在没有 Show()/ShowDialog() 的情况下通过按钮将文本框值发送到两个表单之间的文本框?我想 textBox 将在没有打开表单的情况下获得价值。
3 回答
要访问您需要使用的文本框数据:textBox1.Text
表单是一个对象,因此您可以定义一个更新文本框值的方法(您可以使用公共访问器公开文本框本身)
要将信息从父窗体传递到子窗体,您应该在子窗体上为其需要接收的数据创建一个属性,然后让父窗体设置该属性(例如,单击按钮时)。
要让子表单向父表单发送数据,子表单应该创建一个属性(它只需要是一个 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);
}
}
}
我不知道你说“没有 Show()/ShowDialog()”到底是什么意思,但这无论如何都无关紧要,或者我只是在这里进一步假设你打开了两个窗口(不管你是如何完成的那)。
您希望避免两个表单之间的过多耦合,尤其是文本框等实现细节。您可以使用delegates
并events
触发两个表单之间的数据“发送”。然后,您可以轻松地传递事件数据,并且您订阅的其他表单(或事实上的任何其他对象)不知道表单的确切实现细节,它只知道它将通过委托(事件)接收的数据。我不会在这里发布所有代码,因为它已经在以下 URL 中得到了很好的解释:http: //www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms。