以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态生成navbar的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=107361)

--  作者:liufucan
--  发布时间:2017/9/26 17:01:00
--  动态生成navbar的问题
 提示  未将对象引用设置到对象的实例。另外SelectedIndexChanged事件怎么设置?

Dim o As  WinForm.NavBar
    Dim fnt As New Font("微软雅黑",9)
    o.name="o"
    o.dock=5 \'锚定
    o.VisualStyle=2 \'主题
    o.Font =fnt
    
    Dim PageList As List(Of String)
    If _UserRoles<>"系统管理员" Then
        If len(_UserRoles)>0 Then
            PageList = dt.GetValues("分类","用户标识=\'" & _UserRoles & "\' and 单据权限=1","模块顺序,分类顺序,单据顺序")
        Else
            PageList = dt.GetValues("分类","用户标识=\'" & _UserID & "\' and 单据权限=1","模块顺序,分类顺序,单据顺序")
        End If
    Else
        PageList = dt.GetValues("分类","启用=1","模块顺序,分类顺序,顺序")
    End If
    For i As Integer =0 To  PageList.Count-1
        Dim p1 As  WinForm.NavPage\'新建页面
        Dim r As Integer
        p1.name=PageList(i)
        p1.text= PageList(i)
        p1.font = fnt
        o.NavPages.add(p1.name,p1.name,"")
        Dim ButtonList As List(of String())
        If _UserRoles<>"系统管理员" Then
            If len(_UserRoles)>0 Then
                ButtonList = dt.GetValues("单据|单据图标","用户标识=\'" & _UserRoles & "\' and 单据权限=1 and 分类=\'" & PageList(i) & "\'","模块顺序,分类顺序,单据顺序")
            Else
                ButtonList = dt.GetValues("单据|单据图标","用户标识=\'" & _UserID & "\' and 单据权限=1 and 分类=\'" & PageList(i) & "\'","模块顺序,分类顺序,单据顺序")
            End If
        Else
            ButtonList = dt.GetValues("单据|单据图标","启用=1 and 分类=\'" & PageList(i) & "\'","模块顺序,分类顺序,顺序")
        End If
        For Each Ary As String() In ButtonList
            r=r+1
            Dim but As WinForm.Button
            but = e.Form.CreateControl("navbar_" & Ary(0) , ControlTypeEnum.Button)
            With but
                .Text = Ary(0)
                .Left = 10
                .Height=30
                .Width=180
                .Top = (r-1)*30
                .Font=fnt
                .FlatStyle = FlatStyle.flat
                .BackColor = Color.Transparent
                .MouseOverBackColor=Color.DarkTurquoise
                .BorderSize = 0
                .Image=GetImage(Ary(1).Split(".")(0)& "_navbar." & Ary(1).Split(".")(1))
                .ImageAlign=ContentAlignment.MiddleLeft
            End With
            o.NavPages(PageList(i)) .controls.add(but.basecontrol)
        Next
        r=0
    Next
    e.Form.Controls("Panel1").basecontrol.controls.add(o)


--  作者:有点甜
--  发布时间:2017/9/26 17:34:00
--  

不建议动态生成 NavBar 控件,因为这样你就无法绑定其 SelectedIndexChanged 事件。

 

建议你把控件先放到窗口,再对其操作吧,NavPage 可以随意增加。

 

再有就是,你必须add NavPage 之后,才能设置其 name、text 等信息。


--  作者:liufucan
--  发布时间:2017/9/26 17:43:00
--  
SelectedIndexChanged 事件用全局代码也不行吗?
--  作者:有点甜
--  发布时间:2017/9/26 18:28:00
--  
以下是引用liufucan在2017/9/26 17:43:00的发言:
SelectedIndexChanged 事件用全局代码也不行吗?

 

不过窗口没有全局 SelectedIndexChanged 事件。


--  作者:liufucan
--  发布时间:2017/9/26 19:07:00
--  
窗口加入navbar至少得保留一个页面怎么办
--  作者:有点蓝
--  发布时间:2017/9/26 20:15:00
--  
什么页面?截图说明
--  作者:liufucan
--  发布时间:2017/9/26 20:56:00
--  
我是说navbar自带的页面无法删光,我的页面还是动态生成到navbar的
--  作者:有点蓝
--  发布时间:2017/9/26 21:01:00
--  
我测试没有问题,完全可以删除

Dim nav As WinForm.NavBar = e.Form.Controls("NavBar1")
nav.NavPages.Clear

--  作者:liufucan
--  发布时间:2017/9/26 21:04:00
--  
原来是用clear,我用delete无法删除指定页面
--  作者:有点蓝
--  发布时间:2017/9/26 21:07:00
--  
用一个功能,就要了解一个功能的属性