2

我的项目的主要形式是表格1。这实际上是搜索患者窗口。它有一个组合框,其中填充了数据库中现有患者的列表。这个组合框是用下面写的函数归档的。这个函数是从构造函数中调用的。

    public void fillComboBox()
    {
        items.Clear();
        items.Add("Select Name");
        MainDataContext context = new MainDataContext(); //dotConnect Linq to sqlite
        var query = from p in context.Patients
                    orderby p.Name ascending
                    select p;
        foreach (Patient p in query)
        {
            items.Add(p.Name);
        }
        comboBox1.DataSource = items;
    }

(工作正常)。items 的类型为“List<string>”。在创建每个新表单时,我都会传递 form1 的实例。喜欢

Form3 f3 = new Form3(this);

好的,在找到患者后,控件转到 Form3 以显示患者信息或根据需要进行编辑(工作正常)。然后转到 Form4 为婴儿构建成长图表(工作正常)。当我添加新患者时出现问题。控件通过按钮“新患者”从 Form1 转到 Form2。在 Form2 中,我添加了一个患者,然后转到 Form3 和 Form4(工作正常)。在我完成 Form4 后,使用此代码将控件转移到 Form1

    Form1 f1;
    public Form4(Form1 f1)
    {            
        InitializeComponent(); //and etc
        this.f1 = f1;
    }
    //...other functions etc
    private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.Show();
    }

但是 Form1 中的组合框没有更新。它包含相同的旧列表。但是当我像这样在 Form4 中创建一个新的 Form1

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        Form1 form1 = new Form1();
        form1.Show();
    }

然后它工作正常,但以这种方式。将显示 Form1 的一个实例,而另一个隐藏。并且如上所述,这个新的 Form1 将创建它的子 Forms (2,3,4)。我不想要这个,所以我回到以前的解决方案(转到 Form1 而不在 Form4 中创建新实例)。但这会导致组合框(在 Form1 中)中没有更新,当我关闭我的程序时,它会给出错误。

收藏已修改;枚举操作可能无法执行;

在 Form4 中也试过这个代码

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.fillcombobox();
        f1.Show();
    }

我还尝试覆盖 Form1 的 onShown 和 onLoad 事件,但没有收获,只是痛苦和徒劳。然后我尝试了

应用程序.Restart();

在插入患者后的 Form2 中。这肯定帮助了我。但是会导致另一个问题。插入新患者后,控件转到我想转到 Form3 的 Form1。

请帮帮我。我知道这是一团糟,但您的帮助将不胜感激:)

4

2 回答 2

1

由于您似乎正在使用相同的列表实例(称为项目)并且我猜它是一个 List 对象,因此当列表内容发生更改时控件不会收到通知,因此不会在 UI 中刷新数据。

您是否尝试过为项目集合使用 BindingList ?看这个例子

于 2013-08-18T11:33:26.387 回答
1

收藏已修改;枚举操作可能无法执行;

此错误表明您正在枚举一个集合(可能是一个 foreach),同时您正在修改它。这是不允许的。您不能修改正在枚举的集合。

您需要显示引发异常的行。

于 2013-08-18T09:10:49.403 回答