以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]添加菜单  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120818)

--  作者:blsu33
--  发布时间:2018/6/24 17:45:00
--  [求助]添加菜单
老师,
   希望用for each 逐行一次添加菜单(因为还有其他代码原因,不想通过递归添加,因为还有其他代码是for each 按照行生成的)

可以看到,到第三级顺序 就不对了,如何能按照for each 逐行 添加上菜单

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:foreach添加菜单.table


[此贴子已经被作者于2018/6/24 17:49:30编辑过]

--  作者:有点色
--  发布时间:2018/6/24 20:25:00
--  
Dim Striptab As WinForm.Strip= e.Form.Strips.Add("ca", StripTypeEnum.MainMenu)
\'添加菜单按钮分割线
Dim DT As DataTable=DataTables("表A")
Dim levels As new List(of object)
levels.add(striptab)
For Each dr1 As DataRow In DataTables("表A").Select("", "menuid")
    Select Case dr1("mentype")
        Case "StripItemTypeEnum.MenuItem"
            For i As Integer = levels.count-1 To 0 Step -1
                If dr1("menuid").contains(levels(i).name) Then
                    Dim obj = levels(i).Items.Add(dr1("menuid"),dr1("poutcaption"),dr1("imgsmlt"),val(dr1("mentype")))
                    levels.add(obj)
                    Exit For
                End If
            Next
    End Select
Next

--  作者:blsu33
--  发布时间:2018/6/24 21:24:00
--  
老师 ,
  好久不见了,代码好用,但是放到我的例子中,就不行了,没办法,烦您再给看看。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:foreach添加菜单.table


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180624212312.png
图片点击可在新窗口打开查看


--  作者:blsu33
--  发布时间:2018/6/24 21:28:00
--  
我写的只能生成到二级,按照您给的例子,怎么写进去呢,标注颜色是第一次向您求助的部分?
Dim e =args(0)
Dim pnl As WinForm.Panel=args(1)
Dim Striptab As WinForm.Strip
Dim StriptabName  As String=pnl.name.Replace("pnl","menu")
If forms("serevmain").Strips.Contains(StriptabName) Then
    forms("serevmain").Strips.Remove(StriptabName)
End If
Dim dt As DataTable=Functions.Execute("tablloading","usperation")

Select Case pnl.name.split("_")(0)
    Case "toolpnl"
        Striptab= FormS("serevmain").Strips.Add(StriptabName, StripTypeEnum.MainMenu)
        Striptab.Items.Add(StriptabName.replace("toolmenu","gb_"),"","Tools_exit.png",StripItemTypeEnum.Button)
        Striptab.Items(StriptabName.replace("toolmenu","gb_")).DisplayText = False
        Striptab.Items(StriptabName.replace("toolmenu","gb_")).DockToRight = True \'靠右停放
    Case "findpnl"
        Striptab= FormS("serevmain").Strips.Add(StriptabName, StripTypeEnum.ToolBar)
    Case "stripnl"
        Striptab= FormS("serevmain").Strips.Add(StriptabName, StripTypeEnum.StatusBar)
End Select
pnl.basecontrol.controls.add(Striptab.basecontrol)
\'添加菜单按钮分割线
Dim drsbj As List (of DataRow)
drsbj=dt.Select(pnl.name.split("_")(0) & "=true" & " and id=\'"& pnl.name.split("_")(2) &"\'","itmoder")
If drsbj.count>0 Then
    Dim i1 As Integer=0
    For Each dr1 As DataRow In drsbj
        Select Case dr1("mentype")
            Case "StripItemTypeEnum.Separator"
                Striptab.Items.Add(pnl.name.Replace("pnl","Separator" & i1 ),"","",StripItemTypeEnum.Separator)
            Case "StripItemTypeEnum.MenuItem"
                Dim drslsb As DataRow=lsb("readrules").find("tbltname=\'zamenuset\' And tblcolid=\'menuid\'")
                If drslsb IsNot Nothing Then
                    Dim count As Integer= 0
                    Dim count2 As Integer= 0
                    For i As Integer = 0 To drslsb("colong").length - 1
                        count += val(drslsb("colong").chars(i))
                        count2=val(drslsb("colong").chars(i))
                        If count <= dr1("menuid").length Then
                            Dim str As String = dr1("menuid").Substring(0,count)
                            \'Dim drf As DataRow=dt.find(pnl.name.split("_")(0) & "=true And id=\'" & pnl.name.split("_")(2) & "\' And mentype=\'"& dr1("mentype") &"\' And menuid like\'"& str &"%\' And  menuid <> \'"& str &"\'")
                            \'Dim drf As DataRow=dt.find(pnl.name.split("_")(0) & "=true And id=\'" & pnl.name.split("_")(2) & "\' And mentype=\'"& dr1("mentype") &"\' And menuid =\'"& str &"\'")
                            \'\'If drf IsNot Nothing Then
                            Dim drf2 As DataRow=dt.find(pnl.name.split("_")(0) & "=true And id=\'" & pnl.name.split("_")(2) & "\' And mentype=\'"& dr1("mentype") &"\' And menuid =\'"& str.SubString(0,str.length-count2) &"\'")
                            If drf2 IsNot Nothing Then
                                If Striptab.Items.Contains(str.SubString(0,str.length-count2))=False Then
                                    Dim dr2 As DataRow=dt.find("menuid=\'"& str.SubString(0,str.length-count2) &"\'")
                                    If dr2 IsNot Nothing Then
                                        Striptab.Items.Add(str.SubString(0,str.length-count2),dr2("poutcaption"),dr2("imgsmlt"),val(dr2("mentype")))\'还要改下
                                    End If
                                Else
                                    Dim Stripitm As WinForm.StripItem= Striptab.Items(str.SubString(0,str.length-count2))
                                    If Stripitm.Items.Contains(str)=False Then
                                        Dim dr2 As DataRow=dt.find("menuid=\'"& str &"\'")
                                        If dr2 IsNot Nothing Then
                                            Stripitm.Items.Add(str,dr2("poutcaption"),dr2("imgsmlt"),val(dr2("mentype")))
                                        End If
                                    End If
                                End If
                            Else
                                If Striptab.Items.Contains(str)=False Then
                                    Dim dr2 As DataRow=dt.find("menuid=\'"& str &"\'")
                                    If dr2 IsNot Nothing Then
                                        Striptab.Items.Add(str,dr2("poutcaption"),dr2("imgsmlt"),val(dr2("mentype")))
                                    End If
                                End If
                            End If
                        End If
                    Next
                End If
            Case "StripItemTypeEnum.Label","StripItemTypeEnum.SplitButton","StripItemTypeEnum.Button"
                Striptab.Items.Add(dr1("menuid"),dr1("poutcaption"),dr1("imgsmlt"),val(dr1("mentype")))
                Striptab.Items(dr1("menuid")).DisplayText = True
        End Select
        i1=i1+1
    Next
End If
[此贴子已经被作者于2018/6/24 21:40:14编辑过]

--  作者:有点甜
--  发布时间:2018/6/24 23:40:00
--  
你发的例子和你的描述不符,你的例子要做到什么效果?
--  作者:blsu33
--  发布时间:2018/6/24 23:46:00
--  
老师,
3楼 顺序添加图片上的菜单控件 ,根据表A的前两列生成的,因为 有BTN 有分割线还有菜单,那么希望按照表列的顺序,FOR EACH 逐行生成。

[此贴子已经被作者于2018/6/24 23:49:06编辑过]

--  作者:有点甜
--  发布时间:2018/6/25 9:19:00
--  
Dim Striptab As WinForm.Strip= e.Form.Strips.Add("", StripTypeEnum.MainMenu)
\'添加菜单按钮分割线
Dim DT As DataTable=DataTables("表A")
Dim levels As new List(of object)
levels.add(striptab)
For Each dr1 As DataRow In DataTables("表A").Select("", "menuid")
    Dim T = Nothing
    Select Case dr1("mentype")
        Case "StripItemTypeEnum.MenuItem"
            t = StripItemTypeEnum.MenuItem
        Case "StripItemTypeEnum.Button"
            \'t = StripItemTypeEnum.Button
            t = StripItemTypeEnum.MenuItem
        Case "StripItemTypeEnum.Separator"
            t = StripItemTypeEnum.Separator
    End Select
    If t IsNot Nothing Then
        For i As Integer = levels.count-1 To 0 Step -1
            If dr1("menuid").contains(levels(i).name) Then
                Dim obj = levels(i).Items.Add(dr1("menuid"),dr1("poutcaption"),dr1("imgsmlt"),t)
                obj.text = dr1("poutcaption")
                levels.add(obj)
                Exit For
            End If
        Next
    End If
Next