Click here to Skip to main content
Click here to Skip to main content

Multi-Select TreeView Control in C#

By , 15 Jun 2003
Rate this:
Please Sign up or sign in to vote.
<!-- Article image -->

Sample Image - mwcontrols03.gif

<!-- Add the rest of your HTML here -->

Introduction

This latest version includes a multi-select TreeView control which lets you choose a few different ways of selecting TreeNodes.

There is a test project set up (MWControlsTest) for testing all of the MWControls.

MWControls contains:

  • MWTreeView: A Multi Select TreeView Control (MultiSelect, Multi-Select)
  • MWScrollLabel: A Label Control that scrolls the text back and forth if it does not fit when the mouse is hovering over it.
  • The MWScrollLabel Control also supports displaying the text in different directions: Normal, UpsideDown, Left and Right.
  • MWLabel: A Label control that uses StringFormat.GenericTypographic, meaning that the text doesn't require a large blank area next to it.
  • The MWLabel control also supports displaying the text in different directions: Normal, UpsideDown, Left and Right.

Coding Technologies Used

MWTreeView:

  • Multi-select for TreeNodes.
  • Overridden CancelEventArgs so that AfterXXX and BeforeXXX event handlers can be set up allowing the programmer to cancel setting properties.

MWScrollLabel:

  • A timer is used for the scrolling.

MWLabel and MWScrollLabel:

  • GDI+ is used to draw everything (text and image).
  • The text is rendered properly as disabled when the Enabled property is set to false.
  • A graphical Design Time Editor inheriting from UITypeEditor is used for the TextDir property.

All:

  • Inheritance including overriding event handlers and programming around the fact that some methods etc in the parent control are hidden.

Shortcomings

  • MWLabel and MWScrollLabel: The UseMnemonic property is not used. (I don't intend to fix this myself. If someone has a solution, please let me know.)
  • MWTreeView: When HotTracking is turned on the colors are not correct. (I will probably not fix this myself. If someone has a solution, please let me know.)

Version History and More about the Controls

Version 1.0.3.0

MWTreeView:

  • The MWTreeView control supports proper multi-select functionality. When I say proper I mean better than any other free one I have seen out there (C# or other).
  • MultiSelect is a property of the MWTreeView control and can be set to one of the following values:
    • NoMulti: Multi-selection is turned off. All other features are still available though, so it still works better than a normal TreeView Control.
    • Multi: Free unrestricted multi-selection - any TreeNodes can be selected.
    • MultiSameBranchAndLevel: Multiple TreeNodes can only be selected if they are in the same branch and on the same level.
    • MultiSameBranch: Multiple TreeNodes can only be selected if they are in the same branch.
    • MultiSameLevel: Multiple TreeNodes can only be selected if they are on the same level.
  • Several keys now do things to the MWTreeView: Ctrl+A selects all TreeNodes (according to the restrictions imposed by the MultiSelect property), etc, etc.
  • TreeNodes can be selected using the mouse in combination with the control, shift and alt keys.
  • If the MultiSelect property is set to a value other than NoMulti, no TreeNode has to be selected at all. and once one is selected it can be deselected (control and mouse click).
  • The FullRowSelect property of the original TreeView control didn't seem to work (please correct me if I'm wrong). It has now been implemented.
  • There is a massive amount of code (more than 3400 lines in the MWTreeView class alone), so I guess this is an example (hopefully a good one) of how to subclass a control and add a lot of functionality.

Version 1.0.2.0

MWControlsTest

  • The MWControlsTest project has been added, making it really easy to test all the features of the MWControls.
  • Any new controls added to MWControls can appear on a new TabPage.


Version 1.0.1.0

MWScrollLabel

  • The MWScrollLabel is a subclassed Label control that can be set to scroll the text back and forth if the whole text does not fit. The way I am using this is by starting the scrolling when the mouse is hovering over the control.
  • There are quite a few options that can be set to control the scrolling.
  • Note that the MWScollLabel control is only displaying its text on one line. This is intentional and coupled with its scrolling capabilities is really the whole reason for implementing this control.

Version 1.0.0.0

MWLabel

  • The StringFormat used by the text can be set to one of two options: GenericDefault and GenericTypographic.
    • GenericDefault: This is the StringFormat used by the original Label control.
    • GenericTypographic: This StringFormat is much more precise when it comes to measuring the string.
  • Using the GenericTypographic option (default) means that if the text is right-aligned it will indeed properly align to the right even for very long words with no white-space.
  • The text direction can be set:
    • Normal: Normal horizontal text.
    • UpsideDown: Horizontal text displayed upside down.
    • Left: Vertical text that can be read by tilting your head to the left.
    • Right: Vertical text that can be read by tilting your head to the right.
  • There is an option of displaying an image (the normal Image property or the image from the ImageIndex property) over the text or like the normal Label control under the text.
  • The image (the normal Image property or the image from the ImageIndex property), if one is used, is displayed very close to the applicable edge - not some strange arbitrary distance from the edge.

Disclaimer

Mikael Wiberg 2003

  • mikwib@hotmail.com (usual HoTMaiL spam filters)
  • mick@ar.com.au (heavy spam filters on, harldy anything gets through, start the subject with C# and it will probably go through)
  • md5mw@mdstud.chalmers.se (heavy spam filters on, harldy anything gets through, start the subject with C# and it will probably go through)

Feel free to use this code as you wish, as long as you do not take credit for it yourself. If it is used in commercial projects or applications please mention my name. Feel free to donate any amount of money if this code makes you happy. Wink | ;) Use this code at your own risk. If your machine blows up while using it - don't blame me.

History

  • Updated, June 16th, 2003.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Mikael Wiberg
Web Developer
Sweden Sweden
No Biography provided

Comments and Discussions

 
Questiongreat job PinmemberMember 960785920-Nov-12 9:37 
AnswerRe: great job PinmemberMikael Wiberg21-Nov-12 21:35 
GeneralPrint checked items PinmemberAlexander Pikus3-Nov-08 4:28 
GeneralRe: Print checked items PinmemberAlexander Pikus26-Nov-08 4:19 
QuestionWhat items are checked? PinmemberAlexander Pikus3-Nov-08 4:25 
GeneralUpdate PinmemberAlexander Pikus2-Nov-08 21:21 
AnswerRe: Update PinmemberMikael Wiberg3-Nov-08 0:17 
QuestionHow to access selected items PinmemberAlexander Pikus2-Nov-08 20:21 
QuestionTreeView with bug? Pinmemberwondering28-Aug-08 23:03 
AnswerRe: TreeView with bug? PinmemberMikael Wiberg29-Aug-08 2:21 
GeneralAdd new node to multiselecttreenode - focus not on new node PinmemberLorentzSoc7-Aug-08 12:11 
AnswerRe: Add new node to multiselecttreenode - focus not on new node PinmemberMikael Wiberg7-Aug-08 21:20 
GeneralRe: Add new node to multiselecttreenode - focus not on new node PinmemberLorentzSoc8-Aug-08 1:34 
GeneralRe: Add new node to multiselecttreenode - focus not on new node PinmemberMikael Wiberg8-Aug-08 2:22 
QuestionHow to Select Multiple Controls at Runtime using rubberband rectangle? PinmemberMember #378399620-Mar-07 0:37 
GeneralProblem setting the Checked Property of a TreeNode Pinmembergeorg_werner30-Nov-06 0:56 
GeneralRe: Problem setting the Checked Property of a TreeNode PinmemberMikael Wiberg30-Nov-06 7:05 
QuestionCopy the nodes in slection order Pinmembercelsoalejo5-Sep-06 11:04 
AnswerRe: Copy the nodes in slection order PinmemberMikael Wiberg5-Sep-06 18:54 
Generalwhen tree loses focus, there is no highlighting :-( Pinmembersyzygyfire15-Aug-06 0:03 
GeneralRe: when tree loses focus, there is no highlighting :-( Pinmembersyzygyfire15-Aug-06 0:15 
QuestionSelNodesChanged - Bug? PinmemberGeorge Srb10-Aug-06 20:12 
AnswerRe: SelNodesChanged - Bug? Pinmemberqwer24135412343-May-11 22:32 
QuestionImageIndex is not working ? - Bug PinmemberDmitry Dyachkov4-Aug-06 0:50 
AnswerRe: ImageIndex is not working ? - Fixed PinmemberDmitry Dyachkov4-Aug-06 2:56 
AnswerRe: ImageIndex is not working ? - Bug PinmemberMikael Wiberg4-Aug-06 8:05 
QuestionBug:: MultiSameLevel PinmemberhighDensity18-Jul-06 1:24 
AnswerRe: Bug:: MultiSameLevel PinmemberhighDensity1-Aug-06 0:13 
QuestionWhat bout in VB.NET Pinmemberjo_eylee12-Jul-06 21:19 
QuestionMouse Cancel Events PinmemberBulletSponge18-May-06 6:39 
AnswerRe: Mouse Cancel Events PinmemberMikael Wiberg19-May-06 17:11 
QuestionSelected Nodes Pinmembermaheshcm13-Apr-06 20:12 
AnswerRe: Selected Nodes PinmemberMikael Wiberg14-Apr-06 21:16 
GeneralRe: Selected Nodes Pinmembermaheshcm14-Apr-06 23:36 
GeneralRe: Selected Nodes PinmemberMikael Wiberg14-Apr-06 23:58 
GeneralProviding Updates Pinmembergingerlm1-Jun-05 2:39 
GeneralRe: Providing Updates PinmemberMikael Wiberg1-Jun-05 2:49 
GeneralMulti_Select Pinmembersreejith ss nair24-May-05 2:05 
GeneralRe: Multi_Select PinmemberMikael Wiberg26-May-05 20:57 
GeneralRe: Multi_Select Pinmembersreejith ss nair26-May-05 21:27 
GeneralRe: Multi_Select PinmemberMikael Wiberg26-May-05 21:45 
QuestionCan we make Parent Icon larger than Child node icon? PinsussAnonymous27-Dec-04 0:46 
GeneralNew version of the MWTreeView PinmemberMikael Wiberg16-Aug-04 18:35 
GeneralGreat article, good code comments PinmemberSoliant15-May-04 21:01 
GeneralRe: Great article, good code comments PinmemberMikael Wiberg22-Aug-04 22:49 
QuestionIs their anyway to drag them? PinmemberFocusedWolf5-May-04 7:06 
AnswerRe: Is their anyway to drag them? PinmemberMikael Wiberg5-May-04 9:25 
AnswerRe: Is their anyway to drag them? PinmemberMarco Tenuti26-Apr-05 0:50 
GeneralRe: Is their anyway to drag them? PinmemberMikael Wiberg17-May-05 4:22 
GeneralRe: Is their anyway to drag them? Pinmembermtm@systematic.dk24-May-05 23:25 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140415.2 | Last Updated 16 Jun 2003
Article Copyright 2003 by Mikael Wiberg
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid