我很确定这已经在这里得到了很多次回答,虽然我不知道如何表达它所以我问道。
我有一个“主要”形式。这个表单创建另一个表,在表中给它一个List in constructor。此List将转换为BindingList并显示在表中。用户在列表中标记要删除的项目,并删除那些项目,这为我提供了一个新的 - 修改 - BindingList。这个新的再次转换成常规列表,现在我不知道如何将它返回到第一个表单?
我遇到的问题是程序必须等待用户以他想要的方式编辑它,我不知道该怎么做。感谢。
答案 0 :(得分:2)
你通常会使用一个事件来做这件事。在您从主要表单创建的表单中,添加一个新事件,该事件将传递列表的更新版本。 (称之为ListT
),并在更新列表时调用该事件(例如,通过单击按钮)。
class NewForm {
public event EventHandler<ListT> ListUpdated;
public NewForm(ListT in) {
...
}
private void btn_DeleteSelected_Clicked(...) {
ListT updated = new ListT();
foreach (var item in bindingList) {
if (!item.Selected) {
updated.Add(item);
}
}
ListUpdated.Invoke(this, updated);
}
}
在您的MainForm中,只需在显示新表单之前为此事件订阅一个函数,并在此函数中放置您想要的任何逻辑,以使用新更新的列表更新MainForm。
class MainForm {
void SomeFunc() {
NewForm frm = new NewForm(theList);
frm.ListUpdated += (sender, list) => {
// handle the updated list
}
frm.Show();
}