我有一种情况,用户单击Form1上的按钮以打开Form2。 Form1的加载事件根据从数据库返回的数据填充树视图。当他们将数据输入到Form2时,数据库会更新,但树视图不会更新。如果我关闭并重新打开winform,那么它会提取新数据。
我现在已经挖掘了几个小时,我发现如何从Form2调用Form1中的getdata方法,但它不起作用。我可以在调试模式下跟踪它,并验证我的dataReader包含新值,但树视图不会更新。我是这样做的。
//In form 2
Form1 frm = new Form1();
frm.getData();
什么都没发生。如果我说frm.Show()然后它打开一个带有更新数据的新Form1窗口,但我希望树视图在已经打开的Form1窗口中更新。
我认为这是问题的根源。我对frm的任何调用都发生在一个新窗口中。如何从Form2访问现有的Form1窗口的getData()方法?
答案 0 :(得分:1)
在不知道如何创建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");
}
答案 1 :(得分:0)
我认为您的问题是您正在创建Form1的新实例,而不是传入对原始Form1的引用。如果您传入对原始Form1的引用;您将更新该实例。不是新的。
请参阅此帖,了解我认为您遇到的类似问题。
答案 2 :(得分:0)
我理解的所有事情是你想要引用已经存在的form1。您可以使用Application
访问表单。
喜欢这段代码:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
Form1 myfrm =Application.OpenForms["Form1"] as Form1;
myfrm.GetData();
}
答案 3 :(得分:0)
看看:
//In Form1 opening Form2
Form2 frm = new Form2();
frm.Owner = this;
frm.Show();
//Exemple to call functions to FORM1 from FORM2
private void button1_Click(object sender, EventArgs e)
{
Form1 frmParent = (Form1)this.Owner;
frmParent.testeFunction();
frmParent.InsertInGrid(textBox1.Text);
}
因此,基本上你需要在Form1中创建一个函数来从Form2调用(传递参数)。 我希望这有帮助
答案 4 :(得分:0)
我发现完成此任务的最好方法是在form1上有一个方法,该方法在form2模态关闭后被调用。
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
}