1

我有一种情况,用户单击 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() 方法?

4

5 回答 5

1

在不知道您是如何创建 Form2 并在 Form1 中显示它的情况下,即您是否正在使用它,.Show或者.ShowDialog是否是后者,您所要做的就是使用DialogResult来确定是否调用您的getData方法。

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

如果您正在使用该Show方法,您可以侦听 Form2FormClosingFormClosed事件并在您的 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");
}
于 2013-08-27T03:08:18.477 回答
1

我发现完成此任务的最佳方法是在 form1 上设置一个方法,该方法在 form2 模态关闭后调用。

表格1

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
}
于 2018-12-09T21:42:58.123 回答
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 调用(传递参数)。我希望这有帮助

于 2013-09-18T00:47:10.493 回答
0

我认为您的问题是您正在创建 Form1 的新实例,而不是传入对原始 Form1 的引用。如果您传入对原始 Form1 的引用;您将更新该实例。不是新的。

有关我认为您遇到的类似问题,请参阅此帖子。

从其他表单刷新树视图组件

于 2013-08-26T22:48:27.860 回答
0

我所理解的所有事情是您想要引用已经存在的 form1 。您可以用来Application访问表格。

像这样的代码:

 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            Form1 myfrm =Application.OpenForms["Form1"] as Form1;
            myfrm.GetData();
        }
于 2013-08-27T03:35:54.220 回答