我遇到过这样一种情况:用户单击Form1上的一个按钮来打开Form2。Form1的load事件根据从数据库返回的数据填充treeview。当他们将数据输入到Form2中时,数据库会更新,但树视图不会。如果我关闭并重新打开winform,那么它会拉入新的数据。
我已经研究了几个小时,我发现了如何从Form2调用Form1中的getdata方法,但它不起作用。我可以在调试模式下跟踪它,并验证我的dataReader是否包含新值,但树视图不更新。我是这样做的。
//In form 2
Form1 frm = new Form1();
frm.getData();什么都没发生。如果我说frm.Show(),那么它将打开一个新的Form1窗口,其中包含更新的数据,但我希望treeview在已经打开的Form1窗口中进行更新。
我相信这是问题的根源。我对frm的任何调用都发生在一个新窗口中。如何从Form2访问现有Form1窗口的getData()方法?
发布于 2013-08-27 11:08:18
在不知道如何创建Form2并在Form1中显示它的情况下,也就是说,如果是后者,您使用的是.Show还是.ShowDialog,您所要做的就是使用DialogResult来确定是否调用您的getData方法。
Form2 frm2 = new Form2();
if (frm2.ShowDialog() == DialogResult.OK)
{
getData();
}如果你使用的是Show方法,你可以监听form2的FormClosing或FormClosed事件,并在你的Form1中响应它。就像这样。
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.FormClosed += frm2_FormClosed;
frm2.Show();
}
void frm2_FormClosed(object sender, FormClosedEventArgs e)
{
getData();
}
private void getData() //Surrogate for your getData method
{
MessageBox.Show("Getting Data");
}发布于 2018-12-10 05:42:58
我发现完成这项任务的最好方法是在关闭form2模式后在form1上调用一个方法。
Form1
private void addButton_Click(object sender, EventArgs e)
{
// Create an instance of form 2
Form2 secondForm = new Form2();
// Display form 2
secondForm.ShowDialog();
// Call a method on form1 to update information on form 1. Any code listed after
// the show dialog call will process after Form2 is closed.
UpdateForm1();
}
private void UpdateForm1()
{
// Code your updates to form1 here
}发布于 2013-08-27 06:48:28
我认为您的问题在于您正在创建一个新的Form1实例,而不是传入对原始Form1的引用。如果传入对原始Form1的引用,则将更新该实例。不是新的。
请看这篇文章,了解与我认为你所经历的问题类似的问题。
https://stackoverflow.com/questions/18453972
复制相似问题