I need to be able to disable some of the checkboxes in a TreeView control of a WinForms application, but there’s no such functionality built-in to the standard TreeView control.
I am already using the TreeView.BeforeCheck event and cancel it if the node is disabled and that works perfectly fine.
I also change the ForeColor of the disabled nodes to GrayText.
Does anyone have a simple and robust solution?
Since there’s support in C++ we can resolve it using p/invoke.
Here’s the setup for the p/invoke part, just make it available to the calling class.
We want to determine on a node by node basis. The easiest way to do that is on the draw node event. We have to set our tree to be set as owner drawn in order for this event, so be sure to set that to something other than the default setting.
In your tree_DrawNode function determine if the node being drawn is supposed to have a checkbox, and hide it when approriate. Then set the Default Draw property to true since we don’t want to worry about drawing all the other details.
Lastly, the actual call to the function we defined: