本帖最后由 apple601601601 于 2011-03-27 08:58:04 编辑

解决方案 »

  1.   

    VB里面调用过程,如果带括号,就要用call
         'processData (Text1) '类型不匹配
         Call processData(Text1)   '成功
         processData Text1    '成功
      

  2.   


    恩,谢谢LS!
    刚才测试了一下,的确用 Call processData(Text1) 也可以,不过可以解释下为什么processData(Text1)传递过去的是text1的值而不是text1这个控件么?这种自动转换的机制在什么情况下会被触发呢?
      

  3.   

    你是如何得出这种判断的?
    不用call不符合语法要求,编译就报错,也无法运行这句话。根本不会传什么东西过去,更无所谓传过去的是什么。
      

  4.   


    直接用VB6 DEBUG的..在VB6的"本地"窗口和"监视"窗口都显示arg_textbox是String,值就是text1.text
    没有报错,编译通过了.只是在运行时跳出类型不匹配的窗口...
      

  5.   


    额..发现一个问题..编译的确是通过不了的...因为点击"文件"->生成EXE是生成不了的..但是能够"运行"->"启动",也能够调试...奇怪..
      

  6.   

    对了..之前因为总是不匹配,所以在过程声明里面去掉了As VB.textbox,直接写成了下面的形式Private Sub processData(ByRef arg_textbox)
        If IsNumeric(arg_textbox.Text) Then
               .....省略若干代码
        End If
    End Sub然后用processData(Text1)传过去就是个String...
      

  7.   

    Private Sub processData(ByRef arg_textbox As VB.textbox)
    --------------------------------------------------------------------
    在这个方法中,参数是一个对象
    正确的调用方法有二种:
    call processData(text1)   'text1是对象
    processData text1   'text1是对象传递参数括号是不能随便加的,msdn中有说明,参数加上括号就转换为了表达式,而表达式只能是传值的...
    所以你的问题:
    processData (text1)就相当于call processData((text1))
    这样参数类型变成了传值, textbox的默认属性就是text,所以所传的值是string,这样参数类型不正确当然报错....还有在vb选项中钩选上“要求变量强制声明”吧,加上好的错误处理方法...这样什么编译通过生成不能通过等等现象都不会有....好的编程习惯是非常重要的...