2013-08-26 127 views
0

我有一种情况,用户单击Form1上的按钮以打开Form2。 Form1的加载事件基于从数据库返回的数据填充树视图。当他们向Form2输入数据时,数据库会更新,但树视图不会。如果我关闭并重新打开winform,那么它会提取新数据。C#在关闭Form2时更新Form1

我一直在挖掘几个小时,我发现如何从Form2调用Form1中的getdata方法,但它不起作用。我可以在调试模式下跟踪它,并验证我的dataReader包含新值,但树视图不会更新。我是这样做的。

//In form 2 
Form1 frm = new Form1(); 
frm.getData(); 

什么也没有发生。如果我说frm.Show()然后它打开一个新的Form1窗口与更新的数据,但我希望Treeview在已打开的Form1窗口中更新。

我相信这是问题的根源。我对frm所做的任何调用都发生在一个新窗口中。如何从Form2访问现有的Form1窗口的getData()方法?

+0

你是如何在Form1中创建和显示Form2的? –

+0

虽然打开Form2尝试通过'ref'关键字在Form2的构造函数像'公共Form2(参考TreeView电视)''传递树视图的引用,在Form2更新后,在FormView上的evry操作也刷新Form1()关闭,希望你理解。 –

回答

0

我认为你的问题是你正在创建一个Form1的新实例,而不是传入对原始Form1的引用。如果您传递了对原始Form1的引用;你将会更新那些实例。不是新的。

看到这个职位类似的问题,我觉得你的经历。

refreshing treeview component from other form

1

不知道你是如何创建窗体2,并显示在Form1上它,即您使用.Show.ShowDialog如果是后来所有你需要做的就是使用DialogResult以确定是否要打电话你的getData方法。

Form2 frm2 = new Form2(); 
if (frm2.ShowDialog() == DialogResult.OK) 
{ 
    getData(); 
} 

如果您使用的是Show方法,你可以听窗体2的FormClosingFormClosed事件并在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"); 
} 
0

我理解的所有事情都是你想要引用已存在的form1。您可以使用Application访问表单。

这样的代码:

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      Form1 myfrm =Application.OpenForms["Form1"] as Form1; 
      myfrm.GetData(); 
     } 
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的函数从窗体2调用(传递参数)。 我希望这可以帮助