Got It!

The key is the mouse_up event occurs After the node_check event.

Heres some code to illustrate how its done:

VB Code:
  1. Dim let_me_check As Boolean
  2. Dim mouse_down As Boolean
  3. Dim C_NODE As Node
  4.  
  5. Private Sub Form_Load()
  6. Dim nodX As Node   ' Declare the object variable.
  7. Dim NodY As Node
  8.  
  9. Dim I As Integer   ' Declare a counter variable.
  10.     For I = 1 To 4
  11.        Set nodX = TreeView1.Nodes.Add(, , , "Node " & CStr(I))
  12.         For J = 1 To 4
  13.             Set NodY = TreeView1.Nodes.Add(nodX, tvwChild, , "Node " & I & J)
  14.         Next J
  15.     Next I
  16. End Sub
  17.     'it doesn't seem needed, but as a looping safety precaution
  18.     'the mouse_down boolean signifies that, if a node_check occured
  19.     'while mouse_down is true, it occured from the user physically
  20.     'checking it.
  21.     'ie.. if you uncheck or check it programically, You won't start looping
  22.     'if you use it correctly
  23. Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  24.     mouse_down = True
  25. End Sub
  26.  
  27. Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  28.     'of course, mouse_up occurs after mouse_down, so we dont need to check the mouse_down bool
  29.     'but, still reset it to false
  30.         mouse_down = False
  31.         'if a node was checked, then let_me_check indicates you need to inspect the node value
  32.         'against your conditions. Just for testing,
  33.         'Im checking the passed node value against the check controls check value.
  34.         'In this routine, it allows un-checking when Check1 = 1,
  35.         'but not checking when check1.Value = 1
  36.         If let_me_check = True Then     'place your inspection routine inside this if...endif
  37.             If (Check1.Value = 1) And (C_NODE.Checked = True) Then
  38.                C_NODE.Checked = False
  39.             End If
  40.             let_me_check = False
  41.         End If
  42. End Sub
  43.  
  44. Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
  45.     'if the check occured from a mouse_down event, then do a setup
  46.     'on the variables needed for your inspection routine.
  47.     If mouse_down = True Then
  48.         Set C_NODE = Node
  49.         let_me_check = True
  50.     End If
  51. End Sub

and I attached my development project.

-Hope this helps
-Lou