以下是一段VFP代码:
bbb="form1."
&bbb.load
以下是另一段VFP代码:
bbb="test"
sss=&bbb(...)
...function test(...)
{
...
return
}
以上两个例子在VFP中能够实现,执行时用了代码区的首地址作为代码引用,能实现菜单等点击功能的动态加载,请问VB是否也能实现以上功能?如果能要怎样实现?即使复杂点也不要紧。

解决方案 »

  1.   

    //bbb="test"
    sss=&bbb(...)这个这样实现:Private Sub Command1_Click()
        Dim bbb As String
        bbb = "Command2_Click"
        CallByName Me, bbb, VbMethod
    End SubPublic Sub Command2_Click() '必须声明为public
        MsgBox "hello"
    End Sub
      

  2.   

    //以下是一段VFP代码:
    bbb="form1."
    &bbb.load
    这样:
    窗体若干:窗体1代码:
    Private Sub Command1_Click()
        Dim bbb As String
        bbb = "Form2"
        Dim mfrm As Form
        Dim a As Form
        Dim flag As Boolean
        flag = False
        For Each a In Forms '先在已经加载的窗体中查找目标
            If a.Name = bbb Then '找到目标
                flag = True
                Set mfrm = a
                Exit For
            End If
        Next
        If flag = False Then '如果找不到,则用forms.add获取
            Set mfrm = Forms.Add(bbb)
        End If
        If ObjPtr(mfrm) = 0 Then Exit Sub
        CallByName mfrm, "show", VbMethod
    End Sub
      

  3.   

    CallByName可以用于对象的属性和方法的调用,比如 Name属性,Move方法等,但是对事件好象不行,比如 _Click事件,_MouseMove事件等
      

  4.   

    CallByName当然不会产生事件,但可以调用事件过程,将事件过程改用Public声明就是了。对象外调用对象内的方法,用CallByName是个常用办法,不过有时会遇到麻烦:在跨过程使用对象变量调用(如:子类处理)时,必须用到模块级对象变量,这势必会增加对象的一次引用,却没有合适的办法Set nothing,其结果就可能导致对象因还存在外部引用而无法卸载。(这种现象主要存在于自己的Class中,因为VB内部Form等对象有自己的Unload方法)遇这种情况,建议采用对象指针的办法调用,绕过VB的引用计数...
      

  5.   

    非常感谢各位,其实我的本意是想在程序中动态控制菜单等选项,而且可让别人开发类似插件等扩充程序功能,但前提必须能动态加载响应事件处理代码。在VFP中我可以将函数或过程名赋予变量,然后通过引用加载。“暴风雨”和“小吉”为我解决和解释了load部分的问题,很感谢二位。