以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  动态生成菜单代码执行的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=12015)

--  作者:blackzhu
--  发布时间:2011/8/19 17:26:00
--  动态生成菜单代码执行的问题
  我做了三个表,分别可以在的菜单功能区,配置栏以及访问栏生成控件,因为是动态生成控件,所以代码只能写在在菜单的全局事件里,现在问题是我分别在功能区,以及配置栏还有在访问栏分别生成三个按钮,只要随便按哪一个按钮,会将三个按钮全部执行一次.这个怎么弄?
--  作者:blackzhu
--  发布时间:2011/8/19 17:32:00
--  
Dim code As String
For Each dr As DataRow In DataTables("表A").DataRows
        If dr("功能区") = 菜单 And dr("菜单组件名称") = 按钮 Then
            code = dr("代码") & vbcrlf
            code = code & "Return Nothing"
            Functions.add("zhi",code)
            Functions.complie()
            Functions.Execute("zhi")
        End If
Next
Functions.remove("zhi")

Dim code1 As String
For Each dr As DataRow In DataTables("表C").DataRows
    Dim itm As RibbonMenu.RibbonItem
    For Each itm In QAT.Items
        If itm.Name =(dr("访问栏组件名称")) Then
            code1 = dr("代码编辑器") & vbcrlf
            code1 = code1 & "Return Nothing"
            Functions.Add("dtsc",code1)
            Functions.Complie()
            Functions.Execute("dtsc")
            Functions.remove("dtsc")
        End If
    Next
Next
Functions.remove("dtsc")


Dim code2 As String
For Each dr2 As DataRow In DataTables("配置栏").DataRows
    Dim item As RibbonMenu.RibbonItem
    For Each item In ConfigBar.Items
        If item.Name =(dr2("配置栏组件名称")) Then
            code2 = dr2("代码编辑器") & vbcrlf
            code2 = code2 & "Return Nothing"
            Functions.Add("dtsc1",code2)
            Functions.Complie()
            Functions.Execute("dtsc1")
            Functions.remove("dtsc1")
        End If
    Next
Next
Functions.remove("dtsc1")

我的代码是这样的.

--  作者:狐狸爸爸
--  发布时间:2011/8/19 17:37:00
--  

Dim code As String
For Each dr As DataRow In DataTables("表A").DataRows
        If dr("功能区") = 菜单 And dr("菜单组件名称") = 按钮 Then
            code = dr("代码") & vbcrlf
            code = code & "Return Nothing"
            Functions.add("zhi",code)
            Functions.complie()
            Functions.Execute("zhi")
            Return
        End If
Next
Functions.remove("zhi")

Dim code1 As String
For Each dr As DataRow In DataTables("表C").DataRows
    Dim itm As RibbonMenu.RibbonItem
    For Each itm In QAT.Items
        If itm.Name =(dr("访问栏组件名称")) Then
            code1 = dr("代码编辑器") & vbcrlf
            code1 = code1 & "Return Nothing"
            Functions.Add("dtsc",code1)
            Functions.Complie()
            Functions.Execute("dtsc")
            Functions.remove("dtsc")
            Return
        End If
    Next
Next
Functions.remove("dtsc")

Dim code2 As String
For Each dr2 As DataRow In DataTables("配置栏").DataRows
    Dim item As RibbonMenu.RibbonItem
    For Each item In ConfigBar.Items
        If item.Name =(dr2("配置栏组件名称")) Then
            code2 = dr2("代码编辑器") & vbcrlf
            code2 = code2 & "Return Nothing"
            Functions.Add("dtsc1",code2)
            Functions.Complie()
            Functions.Execute("dtsc1")
            Functions.remove("dtsc1")
            Return
        End If
    Next
Next
Functions.remove("dtsc1")


--  作者:blackzhu
--  发布时间:2011/8/19 17:43:00
--  
老大,测试了一下,第一段代码执行对的,第二段代码也对的,但是第三段执行只会执行第二段的代码.
 而且有个问题,我每一次打开窗口管理,再关闭窗口管理的时候,不做应用,也会执行一次第二段代码?

--  作者:布莱克朱
--  发布时间:2011/8/19 21:36:00
--  
老大的代码不行啊
--  作者:blackzhu
--  发布时间:2011/8/20 9:16:00
--  
老大这个代码,第一段代码执行成功,第二和第三段执行的是一样的结果.认不到配置栏和访问栏.
--  作者:czy
--  发布时间:2011/8/20 13:32:00
--  

呵呵,我不会。

可否采用PerformClick?


--  作者:blackzhu
--  发布时间:2011/8/20 13:43:00
--  
曹老师应该不是这样的,估计是认不到栏目的问题.
--  作者:czy
--  发布时间:2011/8/20 13:50:00
--  
单独执行第三段看看怎么样?
--  作者:blackzhu
--  发布时间:2011/8/20 14:25:00
--  
单独第二段执行第二段,第三段执行第三段.