vb.net的winform程序的变量问题
在一个类中定义了两个变量,和两个方法。
第一个变量是用来存放窗体中的控件修改前的窗体实例,
第二个变量是用来存放窗体中的控件修改后的窗体实例。
第一个方法是用来将传入的修改前的窗体实例参数设置到第一个变量中,
第二个方法是用来将传入的修改后的窗体实例参数设置到第二个变量中,并查找哪些控件被修改了。
代码如下(定义在某个工具类中XXXUtil.vb):
''' 変更前的窗体实例
Private Shared pf_BeforUpdateFormInstance As Form
''' 変更后的窗体实例
Private Shared pf_AfterUpdateFormInstance As Form
Public Shared Sub SetFormControlInfo(ByVal hf_FormInstance As Form)
pf_BeforUpdateFormInstance = hf_FormInstance
End Sub
Public Shared Sub InsBusinessHist(ByVal hf_FormInstance As Form)
pf_AfterUpdateFormInstance = hf_FormInstance
End Sub
在某个窗体中的load事件中调用方法SetFormControlInfo,窗体加载后,修改窗体中控件的数据,然后点击登陆按钮,调用方法InsBusinessHist,这个时候发现,在方法SetFormControlInfo中设置的变量pf_BeforUpdateFormInstance的数据也发生了变化,也就是说,变量pf_BeforUpdateFormInstance和变量pf_AfterUpdateFormInstance中的数据完全一样,都是修改后的数据。我想要的是:修改前的数据不发生变化。请问是什么原因导致修改前的窗体实例变量发生了变化?如何使修改前的变量不变?
[解决办法]
你这两个变量指向的是同一个对象,所以其中一个属性改变,另一个属性也改变,因为它两本身就是同一个对象。
你这样,在Load事件中调用方法SetFormControlInfo时,传入一个新的对象,就重新new一个窗体传过去,而不是传me
即SetFormControlInfo(new 窗体类())
而不是SetFormControlInfo(me)
[解决办法]
pf_BeforUpdateFormInstance = hf_FormInstance传递的是引用,两个变量都指向的是同一个地址了,所以一改变就都改变