呵呵,应该不是的,是窗体第一次被使用的时候被加载到内存的。Private Sub Main()' 程序入口点
Dim myForm As Form1 '声明一个窗体对象
Set myForm=New Form1'实例化该对象
myForm.Show vbModal'显示该窗体
Set myForm=Nothing'释放该窗体占用的内存
End SubSet myObj=New myClass 是在内存中重新创建一个myClass类,也叫实例化,窗体本来就属于类,所以就可以通过上面的代码来实例化,这么操作myObj的时候就没有影响到myClass
Set myObj1=myObj2 就是引用myObj2到myObj1,这么操作myObj1的时候就是在操作myObj2了,
Set myObj=Nothing 销毁一个对象并且执行他的析构函数(在VB中是激发类的Terminate事件,窗体或者自定义类都有这个事件)要执行这些代码在工程属性里面修改为Sub Main。
Load报错因该是该窗体已经被显示了。不过我觉得如果是从Sub Main启动,则窗体都没有被加载到内存,如果是从窗体启动,应该已经被加载到内存了,所以我做大Project的时候一般都是采用Sub Main来启动,
哎,才20分就为你打这么多:—)
Dim myForm As Form1 '声明一个窗体对象
Set myForm=New Form1'实例化该对象
myForm.Show vbModal'显示该窗体
Set myForm=Nothing'释放该窗体占用的内存
End SubSet myObj=New myClass 是在内存中重新创建一个myClass类,也叫实例化,窗体本来就属于类,所以就可以通过上面的代码来实例化,这么操作myObj的时候就没有影响到myClass
Set myObj1=myObj2 就是引用myObj2到myObj1,这么操作myObj1的时候就是在操作myObj2了,
Set myObj=Nothing 销毁一个对象并且执行他的析构函数(在VB中是激发类的Terminate事件,窗体或者自定义类都有这个事件)要执行这些代码在工程属性里面修改为Sub Main。
Load报错因该是该窗体已经被显示了。不过我觉得如果是从Sub Main启动,则窗体都没有被加载到内存,如果是从窗体启动,应该已经被加载到内存了,所以我做大Project的时候一般都是采用Sub Main来启动,
哎,才20分就为你打这么多:—)
于show方法不同的是,load语句并不显示窗体,必须调用show方法才能在桌面中显示窗体。
如果窗体已经载入内存,则show方法将指定窗体放到顶层。如果窗体没有装入,则show方法可以将其装入并显示。
明白了吧
要分要分,,,哈哈哈哈哈
分一定有的,我再说的清楚一点!
当工程无SUB MAIN时 ,设有2个窗体,一个设为启动,运行后另一窗体用
SHOW就可出来! 书上也有说! 所以在这种情况(无SUB MAIN)--按dwenj(阿戴兄台说法---另一个FORM是已经进内存了(在启动主窗体时)还是用SHOW来进内存并显示? 我觉的是后一种!!!show做了两个动作!!!!
当工程有SUB MAIN时,2个都没进内存!那就要实例化了! 这些知识什么VB书上才看的到?
另,你说show了后,再load会报错,我好像没碰到,你的是什么情况下碰到的,报什么错,能说说?
Load装载窗体,只分配内存、初始化对象,并不显示。若对象已经被Load过一次,再次执行Load则报错。
Unload 释放窗体,对象从内存中清除。若以后执行Show,将自动执行Load。
================================================================
Dream.fish正在学XML中...
MSDN太大了!怎么找? 这个问题的路径是?
只有 load Form2
dim f as form1
set f=new form1
f.show
就会创建一个于form1一样的窗体
但是如果没有NEW只是用来引用的。Dim m as form
set m=form1
m.show
m.caption="Hello world"
这个时候被显示的不是m而是form1但是
dim m as form
set m=new form1
m.show
m.caption="Hello world"
则显示的是m而不是form1new在内存中重新创建了一个对象,而没有new只是引用
或者可以在load前面加上“on error resume next"来忽略错误,反正一般而言,你自己设计的窗体在第一个窗体被显示的时候其它的都被载入内存了。所以没有必要使用load再次装入内存。但是如果是你动态加载的控件或者窗体,则就要用到load了
使用一个对象的属性或方法,首先要构造这个对象,所以无论是调用别的窗体的公用变量,还是只用SHOW方法,只要先前没有调用过该窗体,那么当你使用到它的对象时,VB会自动构造一个实例,就是类在内存中的对象,相应会触发初始化,加载,显示等事件。如果已经加载了,还用加载方法当然会报错。SHOW只不过是显示而已
我在MSDN的中看到:
除非在加载窗体时不需要显示窗体,否则对于窗体不需要使用 Load 语句。在窗体还未被加载时,对窗体的任何引用(在 Set 或 If...TypeOf 语句以外)会自动加载该窗体。例如,Show 方法在显示窗体前会先加载它。一旦窗体被加载,不管它是否可见,它的属性及控件会被应用程序所改变。在某些情况下,也许需要在初始化时加载所有的窗体并在以后需要它们的时候显示它们。 所以SHOW看来真的是只做自己的“SHOW”,
1条是什么意思?建了不放在内存?
1条是什么意思?建了不放在内存?”我觉得用代码表示可能是这个样子:
1 Dim myForm As Form1 '1 创建,
2 Set myForm = New Form1 '但不加载。2。呵呵,如果出错,谢谢指正。哎,分数又不能当饭吃,何必太在意分数呢,大家互相帮忙不是挺好的吗?要不然这个论坛有必要成立吗?
我觉得有点无聊耶。
而且如果你这么在意内存以及使用效率,那么就不用VB撒,好的RAD工具还有BCB,Delphi,VS.NET啊,呵呵,BCB仍然是我的最爱。
对于new, set这些语句的用法总是一知半解, 今天读了以上几位大哥的真知灼见,真正受益非浅.要是几位大哥手还不酸的话, 能否顺便讲讲: 类(class), 线程, 进程, ByVal等, 这些又怎么理解呢?
unload是踢出内存
hide是不显示,但不踢出内存
学生没什么时间学那么多RAD,VB也是RAD啊! 边学边用才有效果,以前看的
垃圾书真是太浅了,好书真不多! 是做项目看了几个例子,才发现VB中也有C++
里的SET,NEW什么的?奇怪! 所以(不要笑我)
看来VB也是很那个吗,找基本高级的VB6书再啃啃!
load以后才占据内存,unload后从内存剔除.
比如:程序运行中有一个forms(当前active窗体数组),运行中你显示了几个窗体,
forms中就有几个窗体
也是这一快那一块,难道就没哪位兄台在什么大作上看到这个相关问题的详细清晰的阐述吗?
类(class), 线程, 进程, ByVal等类可是好东东,他可以封装一系列的操作,不过在VB中没有必要太了解类,因为类是为OOP设计的,在VB中使用OOP是不太道德的行为,呵呵,不是要骂VB,而是OOP在VB中无法发挥他的高效,要详细知道类,请参阅《C++ Primer》503页每个程序启动的时候,就必须要创建一个进程,每个进程就最少要有1个线程,在VB中没有必要太深入线程,因为Vb里面实现多线程真的是无聊。ByVal这是个经典的题目,
Sub myMethod(ByVal myParam,ByRef myParam2)
执行
myMethod a,b
的时候,a在内存中被复制了一份,而b却没有,myParam2的地址就等于b,而myParam的地址却不等于a,可以通过一个例子来证明Sub TestBy(ByVal Param1 As Long,ByVal Param1Addr As Long,ByRef Param2 As Long,ByVal Param2Addr As Long)
MsgBox IIF(ValPtr(Param1)<>Param1Addr,"这两个变量是指向不同的内存的,他们是使用ByVal修饰符的",","这两个变量是指向相同的内存的,他们是使用ByRef修饰符的"")
MsgBox IIF(ValPtr(Param2)<>Param2Addr,"这两个变量是指向不同的内存的,他们是使用ByVal修饰符的",","这两个变量是指向相同的内存的,他们是使用ByRef修饰符的"")
End Sub
测试:
TestBy a,VarPtr(a),b,VarPtr(b)
但是对于传入的地址(Param1Addr ,Param2Addr )的修饰符可以为ByVal和ByRef,可以不用管加我QQ吧,这么打累死了,9830118
不好意思,的确是我说的有问题,对象Unload以后不能使用Show了,皮之不在,毛将焉附。实在抱歉。另Eastunfail(东方不败) 所说的:
1 Dim myForm As Form1 '1 创建,
2 Set myForm = New Form1 '但不加载。2。
我认为不对。
Dim MyForm as Form1 '仅是将MyForm声明为一个Form1类(可以这样叫吧)的实例。
Set MyForm as Form1 '这时才真正在内存中为MyForm分配空间,初始化这个对象。这时将发送Initialize事件,但并不发送Load事件,即并不等同于Load方法。
把窗体或控件加载到内存中。语法Load objectobjec 所在处是要加载的 Form 对象、MDIForm 对象或控件数组元素的名称。说明除非在加载窗体时不需要显示窗体,否则对于窗体不需要使用 Load 语句。在窗体还未被加载时,对窗体的任何引用(在 Set 或 If...TypeOf 语句以外)会自动加载该窗体。例如,Show 方法在显示窗体前会先加载它。一旦窗体被加载,不管它是否可见,它的属性及控件会被应用程序所改变。在某些情况下,也许需要在初始化时加载所有的窗体并在以后需要它们的时候显示它们。当 Visual Basic 加载 Form 对象时,先把窗体属性设置为初始值,再执行 Load 事件过程。当应用程序开始运行时,Visual Basic 自动加载并显示应用程序的启动窗体。在加载 MDIChild 属性为 True 的 Form(换言之,子窗体)时,而此时 MDIForm 还未被加载,那么会在子窗体前自动加载 MDIForm。因为 MDI 子窗体不能被隐藏起来,所以在 Form_Load 事件过程结束时马上可以见到 MID 子窗体。由 Visual Basic 函数产生的标准对话框,诸如 MsgBox 和 InputBox,不需要加载、显示或卸载即可简单地直接调用
Let就是平时所说的赋值let a=12 ,就是传值
两者的差别。
少分,懒打了