本帖最后由 bcrun 于 2012-08-20 19:51:36 编辑

解决方案 »

  1.   

    不行的,用select case 吧,传递值把,然后再挑选用哪一个函数或过程
      

  2.   

    关键是每次调用都要重新Case一次,浪费了系统资源我是想做一个时段内重复执行某个过程,过程不固定,但是“时段内重复做某事”这个是固定的,所以想通过将函数过程直接传过去。
      

  3.   


    浪费什么资源呢? 才那么几次CPU时间, 比起你的“循环做某事”,简直不值一提
    如果真的要这样 sub   Parent(aaa   as   string)   as   boolean       'aaa传入另一函数或过程的名称。 
          CallByName   Me,   aaa,   VbMethod                     me是aaa的窗体或对象(public声明的函数也是对象)       
    end   sub sub   test1()   
    .... 
    end   sub sub   acall() 
            Parent   "test1 " 
    end   sub
      

  4.   

    可以,不过比较复杂。一个办法是定义一个接口,并且传递这个接口的实现类,而实现类中包含你要传递的函数。这也是Java等不支持函数指针也不支持委托的语言的标准做法。另一个办法是直接使用AddressOf关键字传递函数指针,并且使用一些小技巧(http://wenwen.soso.com/z/q187621153.htm),这个方法不推荐。还有一个是使用CallByName语句,缺点是,无法做编译检查,如果函数名、参数不正确只有运行才会知道,也不安全,不推荐。
      

  5.   

    这其实就是设计模式中所说的策略模式。我的建议是,当你有要编写高阶函数(将函数作为函数的自变量)的想法的时候,就是你丢掉落后的VB改用一种更好的语言的时候。你的需求在C#中是多么简单:
    void mytest(Action todo)
    {
        dosomethingbefore();
        todo();
        dosomethingafter();
    }
    调用
    mytest(() =>
        {
            MessageBox.Show("...");
        });
      

  6.   

    Call mytest(mymsg)
    Function mytest(ob)
    Call ob
    End Function
    Function mymsg
    MsgBox "Now"
    End function
    ______------------
    以上代码可以运行 而且可以输出 now 但是会报错 说“类型不匹配 ob” 
    求解
      

  7.   

    现在可以了 
    on error resume next
    Call mytest(mymsg)
    Function mytest(fun)
    Call fun
    End Function
    Function mymsg
    do
    MsgBox "Now"
    loop
    next
    End function
      

  8.   

    现在可以了  经过了测试
    on error resume next
    Call mytest(mymsg)
    Function mytest(fun)
    Call fun
    End Function
    Function mymsg
    For i=1 To 4 
    MsgBox "Now"
    next
    End function
      

  9.   

    哎,LZ这么爱思考的话就不该研究VB啊
      

  10.   

    Private Sub Command1_Click()
        Call mytest(mymsg)
    End Sub
     
    Function mytest(ob)
        MsgBox Now
    End Function
     
    Function mymsg()
        MsgBox Now
    End Function