我的程序是这样写的:Dim ctlValue as Control
Dim ctlPrev as Control
Private Sub Form_Load()
    Dim i As Integer
    i = cboCondition(0).ListIndex
    Set ctlValue = CreateNewCtl(strDataType(i))
End SubPrivate Function CreateNewCtl(strDataType As String) As Control
    If Not ctlPrev Is Nothing Then
        Controls.Remove ctlPrev
    End If
    Select Case LCase(strDataType)
        Case "nvarchar", "int"
               Set CreateNewCtl = frmQuery.Controls.Add("VB.TextBox", "txtVal", frmCondition)
    End Select
    Set ctlPrev = CreateNewCtl
    With CreateNewCtl
        .Left = cboCondition(1).Left + cboCondition(1).width + 190
        .Top = cboCondition(1).Top
        .width = cboCondition(2).Left - .Left - 190
        .Height = cboCondition(1).Height
        .Visible = True
    End With
End Function每次当运行到 Controls.Remove ctlPrev, 系统会报错: Run-time error '365': Unable to unload within this context
不知道怎么解决?
另外要动态创建MonthView,它的ProgID应该怎么写?谢谢

解决方案 »

  1.   

    cboCondition(1)???你最好把代码贴全,至少也要说明你的窗体上有那些控件
    //另外要动态创建MonthView,它的ProgID应该怎么写?谢谢
    Dim mytest As Control
    Private Sub Command1_Click()
        Licenses.Add "MSComCtl2.MonthView.2", "{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}"
        '加入上面一行,无需工程-部件 加载有关控件
    Set mytest = Controls.Add("MSComCtl2.MonthView.2", "mytest", Me)
        mytest.Left = 100
        mytest.Top = 100
        mytest.Visible = True
    End Sub
      

  2.   

    谢谢
    具体的问题是这样:在窗体上有三个ComboBox,我定义为一个cboCondition(3)的控件数组,需要根据第一个ComboBox(cboCondition(0))的数据类型创建TextBox、DTPick、ComboBox等控件,第一次可以正确创建,当cboCondition(0)有Click事件时,我需要Remove前一次创建的控件(我用ctlPrev保存创建的控件),然后重新创建新的控件。问题是在Remove旧控件是报错,还请帮忙看看,如果这种方法不对,该如何Remove前一次创建的控件呢?
      

  3.   

    remove方法没错!
    问题出在 cboCondition(0)的Click事件中不允许卸载控件,用commandbutton的Click事件就没问题。为什么会这样,我也不知道。哪位高人能指点一二?
      

  4.   

    楼上说的没错,我试了一下,确实如此,那为什么ComboBox不允许卸载呢?请高人出山指点迷津!!!
      

  5.   

    为什么没人回答我的问题?郁闷ing
      

  6.   

    为什么没人回答我的问题?郁闷ing
      

  7.   

    这个……
    触发combobox的事件来remove Combobox控件本身不行吧,就好像不能开着手电把电池拿出来一样
      

  8.   

    set 他妈的控件= nothing
      

  9.   

    搞一个TIMER ,在触发combobox的事件里触发TIMER , 在TIMER 里干掉combobox
    这样总可以吧?
      

  10.   

    我并不是触发ComboBox的事件来Remove ComboBox,而是通过触发ComboBox的Click事件来Remove动态创建的控件,用ListBox事件来Remove动态创建的控件就没问题,而且Set 动态创建的控件 = Nothing也不行,我现在采用的办法是将需要创建的控件都创建出来,设置它们的Visible=False,然后根据ComboBox的Click事件使相应的控件Visible,其他的控件Visible= False,这样就可以了,只是很困惑,不知道Why?