以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  用了StopRedraw点击目录树节点时卡死的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=107684)

--  作者:happyft
--  发布时间:2017/10/7 19:06:00
--  用了StopRedraw点击目录树节点时卡死的问题
因为某种条件禁止勾选目录树节点,用了下面的代码在勾选后立即取消勾选
\'e.Form.StopRedraw()
\'tr1.StopRedraw()
\'tr2.StopRedraw()
.......
If e.Node.Checked = True Then
    e.Node.Checked = iif(e.node.checked,False,True)  \'恢复复选状态
   \'e.Node.Checked = false  \'用这句结果也是一样
    MessageBox.Show("只有选中按部门角色设置权限时才能勾选表单或流程!","提示")
    Return
End If

If e.Node.Checked = false Then
msgbox(11)
......
end if

\'e.Form.ResumeRedraw()
\'tr1.ResumeRedraw()
\'tr2.ResumeRedraw()

上面的代码如果用的stopRedraw后,点击节点会卡住半天,如果不用则没有问题,但会有屏闪问题
如果用stopRedraw后,取消中间的Return又没有问题,但就是导致If e.Node.Checked = false Then 里面的代码还要执行

是什么原因?

谢谢!



--  作者:有点甜
--  发布时间:2017/10/7 20:07:00
--  

你return之前,一定要写ResumeRedraw


--  作者:HappyFt
--  发布时间:2017/10/7 21:23:00
--  
原来是这个原因啊,那不是每个一Return前用Resumeredraw,之后又要用Stopredraw,如果return有几处,不是很繁琐?
谢谢!

--  作者:有点甜
--  发布时间:2017/10/7 21:27:00
--  

Stopredraw 和 Resumeredraw 要配套使用,stop以后一定要resume,不然就有问题。

 

不然,你不要用return,你用if else做判断,使代码最终执行 Resumeredraw 呗。