You haven't given a lot of detail for your use case afterwards but in the past when I've done this and needed some custom selection facility (it actually involved more states than yes/no/notcheckable) I have:
Added a TreeView
Turned OFF checkboxes
Added an ImageList to the form
Added 3 images: one that looks like a tick, one that looks like no tick, and one that is blank/indicates no toggling is possible
Set the StateImageList
(not ImageList) property of the TV to the ImageList
Set any node that I wish to appear as checked to have a StateImageIndex
of 0
Set any node I wish to appear as unchecked to have a StateImageIndex
of 1
Set any node that I wish to appear as not-checkable to have StateImageIndex 2
Had some code like this that toggles the state only in some cases (e.g. this in NodeMouseDoubleClick):
If e.Node.StateImageIndex = 0 Then
e.Node.StateImageIndex = 1
ElseIf e.Node.StateImageIndex = 1 Then
e.Node.StateImageIndex = 0
End If
Because state 2 isn't mentioned, anything that has state 2 remains thus. You can inspect the stateimageindex to know if a node is "checked" or not.
In this animation, it's the Node 2 that is state 2. A red ring appearing and fading indicates a mouse click (two for doubleclick):

(I just found any old random images for this demo, I don't intend to claim that these represent tick/notick/nottickable, only that they're 3 distinct random icons)
TV setup (all done in forms designer for this demo):

Image List setup:

The treeview can cycle the state itself if checkboxes=true
- it toggles nodes between the image for state 0 and the image for state 1, but you can't successfully set the state to anything else - the tree ignores any setting of StateImageIndex you make, and straight uses images 0/1 depending on the Checked state of the node:
