如何在两个类之间传输数据?

时间:2014-02-24 21:29:15

标签: c# winforms

我很确定这已经在这里得到了很多次回答,虽然我不知道如何表达它所以我问道。

我有一个“主要”形式。这个表单创建另一个表,在表中给它一个List in constructor。此List将转换为BindingList并显示在表中。用户在列表中标记要删除的项目,并删除那些项目,这为我提供了一个新的 - 修改 - BindingList。这个新的再次转换成常规列表,现在我不知道如何将它返回到第一个表单?

我遇到的问题是程序必须等待用户以他想要的方式编辑它,我不知道该怎么做。感谢。

1 个答案:

答案 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();
    }