我的项目的主要表格是表格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
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 中)中没有更新,并且当我关闭程序时,会出现错误。
Collection was modified; enumeration operation may not execute;
也在 Form4 中尝试过此代码
private void button4_Click(object sender, EventArgs e)
{
this.Close();
f1.fillcombobox();
f1.Show();
}
我也尝试重写 Form1 的 onShown 和 onLoad 事件,但没有收获,只是痛苦和徒劳。 然后我尝试了
Application.Restart();
插入患者后的 Form2 中。这肯定帮助了我。但这会导致另一个问题。插入新患者后,控件转到 Form1,而我想转到 Form3。
请帮帮我。 我知道这很困惑,但我们将不胜感激您的帮助:)
最佳答案
Collection was modified; enumeration operation may not execute;
此错误表明您正在枚举一个集合(可能是 foreach),同时您正在修改它。这是不允许的。您无法修改正在枚举的集合。
您需要显示抛出异常的行。
关于c# Collection 修改未在所有 WinForms 中生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297437/