none
在winform里,VB.net里的panel控件不能加载999个自定义控件是为什么? RRS feed

  • 问题

  • 1.首先我创建了一个winform工程,在工程里的form窗体里添加一个panel和一个button控件
    2.再创建了一个自定义用户控件(usercontrol1),里面添加二个combobox控件,三个textbox控件
      自定义用户控load里,对二个combobox随便加些内容.
    3.然后我在form窗体里的button的click事件写上下面这些代码:
      ..............
     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            For i As Integer = 0 To 999
    
                Dim aa As New UserControl1
    
                Panel1.Controls.Add(aa)
    
            Next
    
        End Sub

    运行工程,点button后,报System.ComponentModel.Win32Exceptiont和system.windows.forms.dll错误

    然后我把循环数改成666,自定义控件加载并正常显示,
    请问.net的标准控件panel是加载控件是有什么限制吗?
    现在有项目可能需要加载999个这样的自定义控件(也许自定义控件里面的标准控件会更多),
    如果panel控件不行.那么,net 还有其它什么控件能做到加载999个这样的自定义控件吗?
    或是有其它好的解决方法吗?

    2009年5月6日 5:34

答案

全部回复

  • 你好!
         你catch这个异常:Win32Exception,然后使用NativeErrorCode 或取错误码,然后到MSDN中搜索错误码,看看具体原因是什么,我感觉是操作系统的限制!
    周雪峰
    2009年5月6日 6:15
    版主
  • 你好,调试后: ErrorCode: -2147467259 
                       NativeErrorCode :8
            但在MSDN中查不出这些错误码的解释,不知道怎样可以查到错误的说明
    2009年5月6日 7:03
  • 8代表内存不足啊!实际上这个Panel到是没有限制,但是你的内存限制了你的行为!
    周雪峰
    2009年5月6日 8:57
    版主
  •  哦,这样。
     但我的内存是2G的,加个虚拟内存是3G,其它的windows现行的app内存占用情况是900多M内存。
     剩2G左右内存,应该是够的吧,但不知道您所指内存,是不是指.net运行时,设定的缓存之类的.
     是不是有什么设置可以加大.net运行时的内存空间?
     请指点下

    2009年5月6日 9:07
  • 请问你为什么要加载这么多子控件啊?这样比较容易出问题,即使不出问题,性能也不会太好啊!
    周雪峰
    2009年5月6日 10:12
    版主
  •  原因是RI BEN 人很变态.
      对的,现在的这个系统(相关财务的)只能加载200多个自定义控件(因为自定义控件很复杂),多了就暴掉了.
      性能是极端的不好. 
      但客户(日本人)就好这个,还要调查下怎么能让速度快起来.
      所以说,这个PANEL不行,其它有没有可以的控件,又或是Micosoft有没有关于.net
      性能方面的官方说明,说明这样比较容易出问题,即使不出问题,性能也不会太好.


     

    2009年5月6日 10:20
  • IE的控件都是自己画的
    为什么要这么多控件?

    MSMVP VC++
    2009年5月6日 13:57
    版主