我是编程新手,在理解对象生存期/实例化方面遇到困难。对象/设计模式的多个实例的生存期帮助
我有一个从datagridview和面板的窗口。
datagridview有一个复选框列和从数据库填充的名称列表。
该面板有几个文本框(例如姓名,年龄,最喜爱的运动队)和一个“保存更改”按钮。
这个想法是,当用户通过选中适当的复选框在datagridview中选择一个人时,面板通过从数据库中提取数据来显示该人(姓名,年龄,fav sports团队)的相关数据。如果用户希望更新个人的详细信息,可以通过输入文本框然后单击“保存更改”按钮来完成。迄今为止非常简单。
我设计这个的方法是有一个'面板'类,并在用户选中复选框时创建一个实例。 (注意 - 我创建'panel'类的原因是我打算复制datagridview和panel在我的表单中的其他tabpages上,并认为有一个通用的'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(),但没有运气。
我的问题是:
- 我怎样才能确保只创建一个 面板的实例?
- 如果我创建的 具有相同名称 同一个对象的多个实例?他们都坐在内存或不 “计算机”只保留一个 参考最近 产生的? (是否没有名称 冲突?)
- 我是不是走错了 错误的轨道与我的设计模式 和使用'面板'类?
感谢