VB里面的Unload me相信大家再熟悉不过了,很简单,功能就是卸载一个窗口。
问题是,Unload看上去并没有在内存里真正注销干净,其作用不像是卸载,而更像是From.Hide。
做一个简单的试验。建两个Form,
form1,form2,
在form1设一个属于form1的全局变量 iTest, 在form1里让iTest=5,然后unload form1,
这个时候,form1消失, 想着iTest应该被重置了吧,呵呵,这就犯了想当然的错误,
这个时候在form2里做个按钮,很简单,就是form1.show
瞧瞧看,iTest没有被重置, 依然是5。
变量不重置将会给程序带来无穷无尽的隐患,如果是只有一两个form的小程序倒也没什么,稍微大点的程序最好用API来卸载窗口,方法是向Form发送WM_CLOSE消息,所用API是SendMessage,很简单:
声明:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE =
问题是,Unload看上去并没有在内存里真正注销干净,其作用不像是卸载,而更像是From.Hide。
做一个简单的试验。建两个Form,
form1,form2,
在form1设一个属于form1的全局变量 iTest, 在form1里让iTest=5,然后unload form1,
这个时候,form1消失, 想着iTest应该被重置了吧,呵呵,这就犯了想当然的错误,
这个时候在form2里做个按钮,很简单,就是form1.show
瞧瞧看,iTest没有被重置, 依然是5。
变量不重置将会给程序带来无穷无尽的隐患,如果是只有一两个form的小程序倒也没什么,稍微大点的程序最好用API来卸载窗口,方法是向Form发送WM_CLOSE消息,所用API是SendMessage,很简单:
声明:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE =