以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  目录树的闪烁为什么控制不了(上传了例子)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101701)

--  作者:HappyFt
--  发布时间:2017/6/5 21:32:00
--  目录树的闪烁为什么控制不了(上传了例子)
打开窗口时执行了一个函数统计目录树中的每个节点的可处理记录数,每点击一下节点目录树就会闪烁一次,反复查找就是下面这段代码导致的(注释掉就不闪)

Dim dr,dr2,dr4,dr8 As DataRow
dr2 = DataTables("TabFid").Find("wn = \'" & winName & "\' and winlb = \'flow\'")  \'仅流程表单才起作用
If dr2 IsNot Nothing Then
    Dim tr1 As WinForm.TreeView = Forms("导航").Controls("Tr_All")
    Dim nd As winform.treenode
    
    Dim cmd As New SQLCommand
    cmd.ConnectionName = Mydata
    Dim dt As DataTable
    Dim nm As Integer
    Dim flt As String

    msgbox(1)
    tr1.StopRedraw()
    
    Dim fids As String \'定义一个流程编号集合
    For Each nd In tr1.AllNodes
        If nd.Name = winName Then \'只遍历当前主表所在节点
            Dim drs8 As List(of DataRow)
            drs8 = DataTables("ftbSet").Se lect("tbN = \'" & Mtb & "\' and (sqRole Like " & Role_All & ")","Fid")
            If drs8.Count > 0 Then
                \'---先集合用户有权处理的流程
                For Each dr8 In drs8
                    fids = fids & "," & dr8("Fid")
                Next
                fids = fids.trim(",") 
                If fids > "" Then
                    \'---计算{事务提醒}中用户有权处理的待处理记录数()----------------------
                    flt = "单据名称 = \'" & Mtb & "\' And sys_Fbh In (" & fids & ") And ((sys_Fbh = 1 And (接收人 Like " & Role_swtx & " or 接收人 Like \'%自动导入%\')) or (sys_Fbh > 1 and (接收人 Like " & Role_swtx & ")))"
                    cmd.CommandText ="Se lect count(*) From 事务提醒 where " & flt                     nm = cmd.ExecuteScalar()
                    If nm > 0 Then
                        \'---显示"待处理"记录数
                        nd.Text = nd.Name & "(" & nm & ")"
                    Else
                        nd.Text = nd.Name
                    End If
                End If
                Exit For
            End If
        End If
    Next

    tr1.ResumeRedraw()
    msgbox(2)
End If

上面代码上下都用了防止闪烁的代码,为什么还是会闪烁?

谢谢!
[此贴子已经被作者于2017/6/6 18:14:59编辑过]

--  作者:有点蓝
--  发布时间:2017/6/5 22:03:00
--  
代码在什么事件的?完成什么功能?
--  作者:HappyFt
--  发布时间:2017/6/5 22:18:00
--  

上面代码是在一个函数中,在导航的目录树(节点就是窗口名称)点击打开窗口后就调用这段代码生成当前所选节点表单的可处理记录数用括号显示在后面(5)就是,

现在就是点击报废单打开报废单窗口后导航这个目录树会闪烁一下,这个函数是完全打开窗口后最后才执行的.


[此贴子已经被作者于2017/6/6 18:16:01编辑过]

--  作者:有点蓝
--  发布时间:2017/6/5 22:47:00
--  
调用这个函数的事件代码发出来看看
--  作者:HappyFt
--  发布时间:2017/6/5 22:51:00
--  
 Forms(wn).show  \'---(直到表样式及数据都加载后才让窗口显示成为当前活动窗口以避免屏幕闪烁)

 If Forms(wn).Controls.Contains("Tr_Flow") = True Then
    Forms("导航").Controls("Tr_All").StopRedraw
    Functions.Execute("Refresh_Cords")
    Forms("导航").Controls("Tr_All").ResumeRedraw
End If

这里也用了防止闪屏的,函数里也用了,分别把它取消测试也一样都会闪烁

--  作者:有点蓝
--  发布时间:2017/6/5 23:07:00
--  
这样还会闪么

If Forms(wn).Controls.Contains("Tr_Flow") = True Then
    Forms("导航").StopRedraw
systemready = False
    Functions.Execute("Refresh_Cords")
systemready = True
    Forms("导航").ResumeRedraw
End If
[此贴子已经被作者于2017/6/5 23:07:12编辑过]

--  作者:HappyFt
--  发布时间:2017/6/5 23:45:00
--  
一样的闪法
--  作者:有点色
--  发布时间:2017/6/6 9:06:00
--  
 实例发上来看看。
--  作者:HappyFt
--  发布时间:2017/6/6 18:14:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:目录树闪铄.rar


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


总算把例子做好了,请老师看下,当导航中的节点多时就更明显
谢谢!

--  作者:有点蓝
--  发布时间:2017/6/6 20:26:00
--  
导航是树节点闪,录入审批是窗口切换在闪,只不过2个窗口一样,以为是控件闪

最多也就这个效果
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:目录树闪铄.table