TreeView控件中显示CheckedBox框,只允许读取该checkbox的值,不允许用户改变其状态,请教各位如何实现?我想在NodeCheck事件中使其改变后的值Not一次,可是界面上不能更新,调用Refresh也不行.

解决方案 »

  1.   

    Private Sub treePur_NodeCheck(ByVal Node As MSComctlLib.Node)
              
       If isModify = False Then
       
           Node.Checked = Not Node.Checked
           treePur.Refresh
      
       End If
     
    End Sub在执行这个事件时,控件上更新了,可不知为什么这个事件结束后就又还原成用护操作的状态.
      

  2.   

    习惯做法,用一个时钟控件Timer来控制,如下:
    Dim nd As Node
    Private Sub Form_Load()
    Dim nodX As Node
    TreeView1.Checkboxes = True
    Set nodX = TreeView1.Nodes.Add(, , "Root", "根节点")
    nodX.EnsureVisible
    Set nodX = TreeView1.Nodes.Add("Root", tvwChild, "First", "第一个节点")
    nodX.EnsureVisible
    Set nodX = TreeView1.Nodes.Add("Root", tvwChild, "Second", "第二个节点")
    nodX.EnsureVisible
    nodX.Checked = True
    Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
        Timer1.Enabled = False
        If Not IsNull(nd) Then nd.Checked = Not nd.Checked
    End SubPrivate Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
        Set nd = Node
        Timer1.Enabled = True
    End Sub
      

  3.   

    谢谢myhgyp的回复,你说的方法我试了,当只点一个节点时还可以,快速地点多个节点时会导致某些结点的状态还是被更改了.
      
    还有没有其它的办法,或者怎么修改一下?
      

  4.   

    就是在NodeCheck事件中用Node.Checked = Not Node.Checked最方便~
      

  5.   

    怎么可能,你把Timer1的Interval属性0改成1再试试,看还有没有问题,呵呵
      

  6.   

    To: upsuper(究极人类)
    就是在NodeCheck事件中用Node.Checked = Not Node.Checked最方便~-----这样做,当执行完NodeCheck事件后,还是还原了.To: myhgyp(也许是这样的,信不信由你) 
    怎么可能,你把Timer1的Interval属性0改成1再试试,看还有没有问题,呵呵
    ----当然不是设为0的.问题不在这儿.
      

  7.   

    唉,何必叻?不要checkbox了,根据数据加载不同的图片好了