c#集合修改未在所有WinForms中生效
本文关键字:WinForms 集合 修改 | 更新日期: 2023-09-27 18:28:08
我项目的主要形式是form 1。这实际上是在搜索"患者"窗口。它有一个组合框,里面装满了DB中现有患者的列表。这个组合框是用下面写的函数来归档的。此函数是从构造函数调用的。
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;
}
(效果良好)。项的类型为"List<string>"。在创建每个新表单时,我传递form1的实例。像
Form3 f3=新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中的comboBox没有更新。它包含相同的旧列表。但当我在Form4中创建一个新的Form1时,就像这个
private void button4_Click(object sender, EventArgs e)
{
this.Close();
Form1 form1 = new Form1();
form1.Show();
}
那么它工作得很好,但以这种方式。将显示Form1的一个实例,而隐藏另一个实例。并且如上所述,这个新Form1将创建它的子窗体(2,3,4)。我不想这样,所以我回到了以前的解决方案(转到Form1,而没有在Form4中创建新实例)。但这导致组合框(在Form1中)中没有更新,当我关闭程序时,它会给出错误。
集合已修改;枚举操作可能不会执行;
在Form4中也尝试过此代码
private void button4_Click(object sender, EventArgs e)
{
this.Close();
f1.fillcombobox();
f1.Show();
}
我还试图覆盖Form1的onShown和onLoad事件,但没有收获,只是痛苦和徒劳。然后我尝试了
Application.Restart();
在插入患者后的Form2中。这确实帮了我一把。但这会导致另一个问题。控件转到Form1,我想在插入新患者后转到Form3。
请帮帮我。我知道这是一场混乱,但我们将感谢您的帮助:)
集合已修改;枚举操作可能不会执行;
此错误表明您正在枚举一个集合(可能是foreach),同时又在修改它。这是不允许的。您无法修改正在枚举的集合。
不过,您需要显示引发异常的行。
由于您使用的似乎是同一个列表实例(称为items),并且我猜它是一个list对象,因此当列表内容发生更改时,控件不会得到通知,因此数据不会在UI中刷新。
您是否尝试对项集合使用BindingList?看看这个例子