对象/设计模式的多个实例的生命周期有帮助

时间:2009-09-05 14:12:29

标签: vb.net design-patterns oop

我是编程新手,很难理解对象的生命周期/实例化。

我有一个带有datagridview和面板的窗口。

datagridview有一个复选框列和一个从数据库填充的名称列表。

该面板有几个文本框(例如姓名,年龄,最喜欢的运动队)和“保存更改”按钮。

这个想法是,当用户通过选中相应的复选框选择datagridview中的某个人时,面板会通过从数据库中提取数据来显示该人的相关数据(姓名,年龄,青少年体育团队)。如果用户想要更新该人的详细信息,可以通过键入文本框然后单击“保存更改”按钮来更新。到目前为止一切都很简单。

我设计这个的方法是拥有一个'panel'类,并在用户选中复选框时创建一个实例。 (注意 - 我创建'panel'类的原因是我打算在我的表单中的其他tabpages上复制datagridview和panel,并认为有一个我可以重用的通用'panel'类是有用的。 )

我的代码看起来有点像这样:

If CheckBoxClicked Then
Dim UpdatePanel As New UpdatePanel(MyForm.NameTextBox, MyForm.AgeTextBox, MyForm.FavSportTeamTextBox, MyForm.SaveButton)
UpdatePanel.GetData()
...

当用户点击SaveButton时,数据会更新到数据库,并且我有一条显示消息(简单文本框),显示“更新成功”并显示5秒后隐藏自己。

问题在于:

假设用户选中复选框,检查数据并且不做任何更改,然后选中另一个复选框并决定通过单击“保存更改”按钮更新数据。会发生什么是“更新成功”消息显示两次。

我认为这是因为每次用户选中复选框时,都会创建一个UpdatePanel实例。如果我选择五个不同的人使用复选框,然后点击“保存更改”,我会得到五个“更新成功”消息。

我不知道如何克服这个问题。感觉就像每次单击一个复选框时,我需要检查UpdatePanel的实例是否存在,然后将其销毁。我尝试使用UpdatePanel = Nothing,还调查了IDisposable和GC.Collect(),但没有运气。

我的问题是:

  1. 我怎样才能确保只有一个     面板的实例是否已创建?
  2. 如果我创建了多个实例         具有相同名称的同一对象         他们都坐在记忆中还是留在记忆中         '计算机'只保留一个         参考最近的         产生的? (没有名字         冲突?)
  3. 我去了         我的deisgn模式错误的轨道         并使用'小组'类?
  4. 由于

1 个答案:

答案 0 :(得分:0)

确保在更新数据库之前检查是否有任何更改。可能每当用户查看数据时,您都会添加一些可以添加单个更新的内容。如果您发布更多代码会更容易回答,因为您的解释不是很清楚,如果没有看到大部分代码,很难说问题出在哪里。

  1. 使用singleton模式

  2. 这取决于您如何创建它们。在方法范围中创建的对象被标记为删除,并等待GC收集他。如果你的对象存储在WinForm的某个变量中,它将使它们远离GC。所以默认情况下对象正在消亡,但你可以让它活得更久。另请注意,GC时间未确定,您永远不知道GC何时会执行此操作并销毁对象。

  3. s not clear what was done, so if you post the code I能够回答这个问题。