如何避免TreeView中Checked事件死循环

       在TreeView的AfterCheck事件中添加处理代码,设置其它相关TreeNode的Checked属性。

      问题:

      通过代码改变TreeNode.Checked属性同样会触发TreeView.AfterCheck事件。若节点A的状态改变时需要自动改变节点B的选中状态,且节点B的状态改变时也需要自动改变节点A的选中状态,即A和B互为相关节点时。此实现将导致死循环。

     解决办法:

     AfterCheck的事件中的第二个参数(e As System.Windows.Forms.TreeViewEventArgs)对象具有属性Action,其值标识了是何种行为解决了AfterCheck事件。对于通过代码设置TreeNode.Checked属性所引发的AfterCheck事件,该参数的Action属性值为UnKnow。假若我们希望节点状态的改变不会递归扩散,则可以在AfterCheck的响应代码里判断该属性,在值为Unknow时不进行操作。

 

    举例:

    Private Sub trAuth_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles trAuth.AfterCheck
        If e.Action <> TreeViewAction.Unknown Then
         '''代码执行

        End If

    End Sub   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值