3

我有一个显示来自 MySQL 表的数据的应用程序。基本上,我的应用程序由两种形式组成:主形式和用于向数据库添加内容的形式。

主窗体显示数据库中的所有条目和相关信息。当用户想要向数据库添加新条目时,会打开一个提示输入信息的辅助表单。填写完信息后,用户按下提交按钮并关闭表单。我的问题是,当辅助表单关闭时,listBox主表单中的 不会更新以反映新添加的条目。

以下是用户提交辅助表单时执行的代码:

    private void closeWindow()
    {
        mainForm parent = new mainForm();
        parent.listParts.Refresh();
        this.Close();
    }

listBox当我调用刷新时,它没有显示我新添加的信息是否有原因?也许我以错误的顺序调用某些东西?或者该Refresh()方法甚至不能那样工作?

任何帮助,将不胜感激!或者,如果您知道更好的方法来做到这一点,我很想听听!

4

3 回答 3

4

问题是您刷新了错误的表单

private void closeWindow()
{
    mainForm parent = new mainForm();
    parent.listParts.Refresh();
    this.Close();
}

由于您使用: new mainForm(),因此您正在分配一个完全独立的“mainForm”实例,并刷新它的内容。这不会影响现有的打开表单。

我建议将引用传递给mainForm辅助表单的构造函数。然后它会知道它需要使用哪个 mainForm 实例Refresh()来调用.

于 2012-04-06T17:47:05.960 回答
2

Reed给出了一个答案,解释了为什么你所做的事情不起作用,这是如何实际解决它的一种可能的解决方案:

在 MainForm 的一些事件处理程序中:

var otherForm = new SomeOtherForm();
otherForm.Closed += (sender, args) =>
{
  //update the listbox in MainForm here
};

如果您需要来自第二种形式的信息来更新列表框,请在其中创建一个公共属性,SomeOtherForm以公开MainForm.

于 2012-04-06T17:51:35.073 回答
1

我认为您应该重新加载数据。再次获取它设置数据源

为您的子表单拥有一个父属性,该属性属于您的第一个表单。

像这样的东西。

您的家长表格

public partial class KitTypes : Form
{

 public void ReloadData()
 {
   // Get the data and Set as datasource of control
 }

}

和儿童形式

public partial class Kit : Form
{
    private int _KitId=0;
    private KitTypes _parentForm = null;


 public Kit(KitTypes parentForm)
 {
   _parentForm =parentForm;
 }
}

从您的第一个表单中,当您创建这个对象时,将父表单作为参数传递

  Kit objChild=new kit(this);
  objChild.Show();

现在在您的孩子中,您可以像这样调用父表单的公共方法

this._parentForm.ReloadData(); 
于 2012-04-06T17:46:20.610 回答