C# – Allow multi-select in a .NET TreeView


I'm stuck in .NET 2.0 Windows Forms.

It doesn't look like the ability to select multiple nodes exists in the standard TreeView control.

I'm trying to do this for a context menu selection. So check boxes aren't an acceptable UI paradigm here.

What's the best way to provide that very necessary functionality?

Best Solution

We did this in a WTL project once, but the basic work needed is the same for .NET. To achieve a multiple selection tree control, you will need to draw the tree items yourself and override the keyboard and mouse handling. You will also need to maintain your own list of items that are selected.

Don't forget to consider selection rules (are parents and children allowed, for example), and don't forget to implement the keyboard shortcuts including selection using Ctrl, Shift, and Ctrl+Shift, as well as the Spacebar for selecting/deselecting.