如果我把代码加入表单按钮的click事件中却很正常?!

解决方案 »

  1.   

    回复TechnoFantasy() 
    一次要打开两个或两个以上窗口,可以将源代码中的“Newform”声明成数组,如果无法确定要打开的个数,可以声明为动态数组。
    Sub AddNewForm()
    For N = 1 To 8
        Dim Newform(1 to 8) As New Form1
        AllNumber = AllNumber + 1
        Forms.Add Newform
        Newform.Show
    next
    end sub
      

  2.   

    回复TechnoFantasy() 
    一次要打开两个或两个以上窗口,可以将源代码中的“Newform”声明成数组,如果无法确定要打开的个数,可以声明为动态数组。
    Sub AddNewForm()
    For N = 1 To 8
        Dim Newform(1 to 8) As New Form1
        AllNumber = AllNumber + 1
        Forms.Add Newform
        Newform(allnumber).Show
    next
    end sub
      

  3.   

    你的代码中少了next n,是不是这里错了。如果不是的话,建议你用F8一步一步调试,看看是否真的是8个窗体,也许代码所加载的窗体不只8个。
      

  4.   

    to limengchen:
    不知道你在学vb之前有没有学过qb。微软早在qb中就将next n中的n剩去。根本不是next的问题。
    to beandog:
    我把你这段代码在我的机器上运行了一下,果然溢出。后来仔细一看,呵呵,不溢出才怪呢!你在每次执行form1的form_load事件时,都要执行AddNewForm子程序。同时产生8个和form1完全一样的窗体,这8个窗体每个再产生8个子窗体......由此下去就是8^n个窗体。你在插十个128M的内存也不够!
    我不知道你的AddNewForm是干什么用的但我想你如果还坚持使用它的话,我建议你做一个和form1一样的form2,在form1中调用AddNewForm生成8个form2.就不会产生循环调用的后果了。
      

  5.   

    这段代码难道真如lv_kevin所说是写在form_load里面的?
    而且你调用这个方法的form就是你要打开的form1???
    太夸张了吧……???
      

  6.   

    建议使用一个Class来统一所有的Form请求,对于大的应用这是非常有用的。
      

  7.   

    to lv_kevin
    我新建立了一个模块来储存这段代码。
      

  8.   

    "同时产生8个和form1完全一样的窗体",也不对,因为生成第一个实例的时候就又去调用自己了,事实只是递归调用没有设结束条件,当然要溢出了,好好去补课吧。
    这个问题真有够无聊,特可笑的是作者根本没有认真思考就拿出来贴。
      

  9.   

    to:wqspedia2,有时人就是转不过弯,这就是高手与菜鸟的分别了。如果你是高手,帮一下就行了,不要损人吧。
      

  10.   

    to wqspedia2
    喂,能不能文明点儿?我才上高二!!瞧瞧,问点问题就说这种话,这就是中国程序员的素质吗?不就是比我多生几年吗?
    不要打击人的积极性嘛:(
      

  11.   

    to wqspedia2
    你恐怕还没看懂我的意思吧?
    建议回家好好学学语文:)
    就这也敢自命高手?!
    请其他好心人多多帮助解决此问题,谢了!
      

  12.   

    我试过,很有意思,放在form_avtivate() 事件中仍然会陷入递归,但是可以退出
    把for...next 去掉,然后在开始的地方加上 if forms.count>allnumber then exit sub 
    在 form_activate()中只要运行一次 call addnewform 就能加入 allnumber 个窗口但在command1_click()中要运行allnumber 次才可以,所以最好给函数加一个参数:allnumber
      

  13.   

    我也觉得beandog兄的程序有问题
    1,没有Next,应该编译不通过才对。
    2。AllNumber ,N 都没有定义,虽然可以执行,绝对不是好习惯。
    3。wqspedia2(wqspedia2)兄说得我也赞同,不知beandog兄为什么说他没理解意思?麻烦说说你的意思。
     
      

  14.   

    to lujianjian
    1、其实原程序中是有next的,只不过因为粗心,少加了。给各位带来的不便,还请原谅。
    2、allnumber、n我都定义了,只是没写出来。定义如下
       public allnumber as Integer
       public N as Integer
    另外,多谢lujianjian提醒!我确实有这种习惯,以后一定多加注意。
    3、可能是我的表述有问题。这里我在说明一下。
    此段代码没有加在任何控件(包括表单)的任何事件里,而是放在一个公用模块里。是这样的:
    打开工程后,单击下拉菜单的“工程”项,选择“添加模块”,然后将代码放入模块中。在一个command控件的单击事件中调用。
    可能这样说明还会用一些朋友不明白,这样吧,如果谁想要源程序,请email: [email protected]
    4、最近我已经解决这个问题了:原因是表单中的八个Flatbttn控件(程序员大本营中有下载)。把这八个按钮去掉就一切ok了。在此提醒各位朋友小心使用此控件,尤其是在MDI的自窗体中。另外,我还想向wqspedia2朋友道歉,那天看了你的留言,我真有点生气可能说了难听的话,请一定原谅。谢谢!