呵呵,应该不是的,是窗体第一次被使用的时候被加载到内存的。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分就为你打这么多:—)

解决方案 »

  1.   

    不一定的,他们之间还是有区别的。
    于show方法不同的是,load语句并不显示窗体,必须调用show方法才能在桌面中显示窗体。
    如果窗体已经载入内存,则show方法将指定窗体放到顶层。如果窗体没有装入,则show方法可以将其装入并显示。
    明白了吧
    要分要分,,,哈哈哈哈哈
      

  2.   

    TO Eastunfail(东方不败)与dwenj(阿戴兄台:
       分一定有的,我再说的清楚一点!
       当工程无SUB MAIN时 ,设有2个窗体,一个设为启动,运行后另一窗体用
      SHOW就可出来! 书上也有说!  所以在这种情况(无SUB MAIN)--按dwenj(阿戴兄台说法---另一个FORM是已经进内存了(在启动主窗体时)还是用SHOW来进内存并显示?  我觉的是后一种!!!show做了两个动作!!!!
       当工程有SUB MAIN时,2个都没进内存!那就要实例化了!   这些知识什么VB书上才看的到?   
      

  3.   

    我也认为有区别,比如,在Load 窗体时,我们不是可以设置它Visible为False吗!这样不就见不到吗?但是窗体还不是Load啦!
      

  4.   

    我也不知道什么书上有,多多看看别的编程语言的书,上面就有的,我也还不是看和做出来的。我想一些真正的VB高级编程的书上有,因为一般的书是不会介绍这些的。但是根据试验证明,在Form1种利用代码动态修改别的窗体的属性的时候,就算他没有被载入内存也被重新载入了,而不光是修改Visible属性,因为在Form中访问别的窗体中的成员,是不存在NULL引用这个问题的,这也是为什么VB比别的语言要好学的原因之一。
      

  5.   

    只能说明不一定,因为还有一种情况…!!!那就是启动时设置为:main sub()
      

  6.   

    孔子曰:dwenj(阿戴) 同志说的是对的,而且你也说了,在窗体没有装入的时候,用show可以既装入,又show,但是如果在窗体没有装入的时候用load,那它是不会显示的,但是已经在内存了,可以用了。不知道你(书呆)究竟还有哪里不明白。
    另,你说show了后,再load会报错,我好像没碰到,你的是什么情况下碰到的,报什么错,能说说?
      

  7.   

    执行Show时,先检查窗体是否装载,若未装载,先执行Load;若已装载,显示它。
    Load装载窗体,只分配内存、初始化对象,并不显示。若对象已经被Load过一次,再次执行Load则报错。
    Unload 释放窗体,对象从内存中清除。若以后执行Show,将自动执行Load。
      

  8.   

    另,书呆真的是名副其实,你说得问题,在msdn上都有说明,为什么一定要找书呢?真是搞不懂。
      

  9.   

    第一次show才装入.或在Frm1中调用frm2中的控件属性,方法也会装入Frm2一个窗体没有调用show or load  or 其中控件没有被调用,不会装入内存,本人的理性认识.不知M$是怎么做的.到2000 or XP试试就知道了.
    ================================================================
    Dream.fish正在学XML中...
      

  10.   

    to  lsr66(三)(人)(行)(有)(我)(师)兄台:
        MSDN太大了!怎么找? 这个问题的路径是?
      

  11.   

    to  lsr66(三)(人)(行)(有)(我)(师)兄台:    我是说在无MAIN SUB()下,为显示第2个窗体,在启动窗体放按扭,按扭下写FORM2。LOAD语句报错!可用FORM2.SHOW它就出来了!
      

  12.   

    窗体没有Load这个方法
    只有 load Form2
      

  13.   

    在设计时创建的窗体是不能用load来加载,不然就会抱错
      

  14.   

    是偶笔误!  哦,是清楚了!!  show 做了二个动作!!
      

  15.   

    是 LOAD FORM2,没报错! 对不起!那为什么很多用SET ,NEW什么的,好处?
      

  16.   

    运行时创建新窗体
    dim f as form1
    set f=new form1
     f.show
    就会创建一个于form1一样的窗体
      

  17.   

    SET 和NEW一起连用是用来实例化另外一个对象的
    但是如果没有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了
      

  18.   

    你设计的form1本身应该是一个类,使用的时候需要做实例化,所以用new是正确的。在vb中当你使用load form1语句时,程序自动生成了一个对象,名字和类的名字一样:form1。
      

  19.   

    你只要在LOAD等事件中加几个MSGBOX ,运行一下就知道VB的工作顺序了,何必讨论这么久?
    使用一个对象的属性或方法,首先要构造这个对象,所以无论是调用别的窗体的公用变量,还是只用SHOW方法,只要先前没有调用过该窗体,那么当你使用到它的对象时,VB会自动构造一个实例,就是类在内存中的对象,相应会触发初始化,加载,显示等事件。如果已经加载了,还用加载方法当然会报错。SHOW只不过是显示而已
      

  20.   

    你自己设计的窗体在第一个窗体被显示的时候其它的都被载入内存了---东方失败兄台!你说的这句保留意见,找了MSDN,虽然清楚了一点,可是那里太乱了!比如窗体从创建到卸载好象中间和多状态!!
       我在MSDN的中看到:
         除非在加载窗体时不需要显示窗体,否则对于窗体不需要使用 Load 语句。在窗体还未被加载时,对窗体的任何引用(在 Set 或 If...TypeOf 语句以外)会自动加载该窗体。例如,Show 方法在显示窗体前会先加载它。一旦窗体被加载,不管它是否可见,它的属性及控件会被应用程序所改变。在某些情况下,也许需要在初始化时加载所有的窗体并在以后需要它们的时候显示它们。  所以SHOW看来真的是只做自己的“SHOW”,
      

  21.   

    MSDN中窗体存活: 1    创建,但不加载。2。
      
       1条是什么意思?建了不放在内存?
      

  22.   

    哎,呵呵,错误有,谢谢上面的ssdssd(书呆) 指出了我的错误,呵呵,都有1年多没有来这个论坛了,也没有用VB了。“MSDN中窗体存活: 1    创建,但不加载。2。
      
       1条是什么意思?建了不放在内存?”我觉得用代码表示可能是这个样子:
    1 Dim myForm As Form1    '1    创建,
    2 Set myForm =  New Form1 '但不加载。2。呵呵,如果出错,谢谢指正。哎,分数又不能当饭吃,何必太在意分数呢,大家互相帮忙不是挺好的吗?要不然这个论坛有必要成立吗?
      

  23.   

    对了,问个问题,你为什么要问这样的问题啊。
    我觉得有点无聊耶。
    而且如果你这么在意内存以及使用效率,那么就不用VB撒,好的RAD工具还有BCB,Delphi,VS.NET啊,呵呵,BCB仍然是我的最爱。
      

  24.   


    对于new, set这些语句的用法总是一知半解, 今天读了以上几位大哥的真知灼见,真正受益非浅.要是几位大哥手还不酸的话, 能否顺便讲讲: 类(class), 线程, 进程, ByVal等, 这些又怎么理解呢?
      

  25.   

    不会吧,不然unload me 之后怎么还能用show
    unload是踢出内存
    hide是不显示,但不踢出内存
      

  26.   

    TO  Eastunfail(东方不败)兄台:
        学生没什么时间学那么多RAD,VB也是RAD啊! 边学边用才有效果,以前看的
    垃圾书真是太浅了,好书真不多! 是做项目看了几个例子,才发现VB中也有C++
    里的SET,NEW什么的?奇怪! 所以(不要笑我)
       看来VB也是很那个吗,找基本高级的VB6书再啃啃!
      

  27.   

    show可以自动load,但load不可以自动show.
    load以后才占据内存,unload后从内存剔除.
    比如:程序运行中有一个forms(当前active窗体数组),运行中你显示了几个窗体,
    forms中就有几个窗体
      

  28.   

    偶觉的这个问题可能片言之语真的比较难说说清,光光找MSDN,这种问题的说明
    也是这一快那一块,难道就没哪位兄台在什么大作上看到这个相关问题的详细清晰的阐述吗?
      

  29.   

    C++里面有SET?呵呵,第一次听说,但是如果是类的成员前面加上get和set倒不是第一次了。呵呵,在高级的VB书也只是复杂的过程完成简单的事情。
    类(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
      

  30.   

    To luckysym(热带风暴) :
      不好意思,的确是我说的有问题,对象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方法。
      

  31.   

    窗体和类一样有两个关键的事件,初始化和卸载(Ini****和忘了怎么拼了)一般人不用你可以在里面加断点就知道了
      

  32.   

    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,不需要加载、显示或卸载即可简单地直接调用
      

  33.   

    看得眼花啊。在工程里建立的窗体,在执行时VB都会自动生成一个与窗体名称相同的全局窗体变量,所以可以直接使用,不用Dim xx as new frmxx。如果你用不同与窗体名称的变量的话,就得用DIM—>SET NEW->SHOW了。
      

  34.   

    set就是指向实例的指针,
    Let就是平时所说的赋值let a=12 ,就是传值
    两者的差别。
    少分,懒打了