小弟在模块中写了一个用以下代码生成控件的过程
'下面的写在Form中
Dim WithEvents StartPerson1          As VB.TextBox
Private Sub Form_Load()
    MakeStartPerson1
End Sub
'下面这句写在模块中
Public Sub MakeStartPerson1()
    Set StartPerson1 = Form1.Controls.Add("VB.TextBox", "StartPerson1", Form1)
    StartPerson1.Visible = True
End Sub
并在程序Form中调用此过程生成控件
可以生成控件 没有问题
但是我发现无法调用
即在Form中使用
Private Sub StartPerson1_Click()
     StartPerson1.text = "王五"
End Sub
在控件上没有任何反映而如果我把Form代码中的MakeStartPerson1删除 再把
Set StartPerson1 = Form1.Controls.Add("VB.TextBox", "StartPerson1", Form1)
StartPerson1.Visible = True
复制进Form的代码中后 再点击控件就有反应了小弟是新手,不知道问题出在什么地方,望各位大侠帮帮忙

解决方案 »

  1.   

    Click事件要在文本框中单击一下才行
      

  2.   

    Public Sub MakeStartPerson1()
    Set StartPerson1 = Form1.Controls.Add("VB.TextBox", "StartPerson1", Form1)
    StartPerson1.Visible = True
    End Sub上面没有必要放模块里,直接放窗体代码里
      

  3.   

    放在模块中也没法调用啊 StartPerson1这个变量在form1中声明,在模块中是未定义的
      

  4.   

    Form 中的 StartPerson1 是一个成员变量。你的模块头肯定没有 Option Explicit,这样导致 MakeStartPerson1 中可以不经声明就创建一个句柄变量 StartPerson1,它与 Form 中的 StartPerson1 毫无关系,所以不会响应 Form 中的 StartPerson1_Click 事件。
      

  5.   

    顶4楼,而且WithEvents只能在类模块中使用,即使你在标准模块中的MakeStartPerson1()中,通过参数传入Form1中声明的StartPerson1,生成的textbox应该也不会响应事件...
      

  6.   


    我的确是没有用Option Explicit 这次忘记了
    那它与Form中的StartPerson1没有关系 是否能够在窗口代码中建立起与它的关系呢?
    因为这个代码实在是太长了 我不想放在窗体代码中
      

  7.   

    如果你想做个公用方法来简化窗体代码,可以通过类来实现,简单思路示例:
    '添加一个类模块,名称Class1,代码:
    Option ExplicitDim WithEvents oText As VB.TextBoxPublic Function MakeStartPerson1(oTextName As String, Container As Object) As TextBox
        Set oText = Container.Controls.Add("VB.TextBox", oTextName, Container)
        oText.Visible = True
        Set MakeStartPerson1 = oText
        Set oText = Nothing
    End Function'添加一个标准模块,代码:
    Option ExplicitPublic myClass As New Class1
    '窗体中代码:
    Option Explicit'下面的写在Form中
    Dim WithEvents StartPerson1 As VB.TextBoxPrivate Sub Form_Load()
        Set StartPerson1 = myClass.MakeStartPerson1("StartPerson1", Me)
    End SubPrivate Sub StartPerson1_Click()
        StartPerson1.text = "王五"
    End Sub'这样处理,要注意程序结束时,最好要释放一下公共类myClass