我有一个关于在两个 Windows 窗体之间维护列表的问题。这是一个我需要创建通讯录的项目。
我选择以列表的形式维护联系方式。我的第一个 windows 窗体 (form1) 包含一个 list 的主副本AddressBook
,其中包含地址簿。我将 4 个条目硬编码到地址簿列表中,以便进行实验并让“添加”和“编辑”等简单功能正常工作。
我有第二个名为 Add 的 Windows 窗体,我可以在其中将新条目添加到列表中。这工作正常。我可以在添加表单中添加一个新联系人,这会显示在初始表单 1 主表单中。
我的问题出现在 EDIT 表单中。我将地址簿(主)列表传递给 EDIT 表单。EDIT 表单采用主列表,我能够操作该列表中的记录。但是,在将新列表发送回母版页 (form1) 时,它不会接收到它。我使用的代码与在成功发回新列表的 ADD 表单中使用的代码相同。但是,此代码在发回已编辑的列表时不起作用。
这是我在 form1 中的 AddressBook 属性
public List<Contact> addressBook;
public List<Contact> AddressBook
{
get { return addressBook;}
set {addressBook = value;}
}
在编辑内:
public Edit()
{
InitializeComponent();
temp = Master.AddressBook; // temp is the temporary List I update within EDIT
}
** 然后我有了我的算法,它成功地让我编辑列表 temp。列表 temp 现在有已编辑的列表* *
然后当我点击保存按钮时,我使用以下代码;
Master.AddressBook = temp;
我需要的只是将列表 temp 发送回 form1。
Master.AddressBook = temp;
当我通过 ADD 表单向列表添加值时,该代码有效。
添加表格:
public Add()
{
InitializeComponent();
temp = Master.AddressBook;
}
**** code to add a new record into the list temp. the new record is called newRecord**********
private void btnAddClose_Click(object sender, EventArgs e)
{
stor.AddressBook = temp; // when I hit close on the form, it updates the master list AddressBook
this.Close();
}
这一切可能措辞很糟糕,但本质上我的代码失败的唯一一点是当我想通过用列表 temp 替换它来更改 form1 中的主地址簿时,它是我的 EDIT 表单中的已编辑列表。
我认为这与我的 AddressBook 属性有关。但这并不能解释为什么我可以用包含新记录的列表替换 AddressBook 但我不能用包含已编辑记录的列表替换它。