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

Active Directory object picker control

, 16 May 2004 CPOL
Rate this:
Please Sign up or sign in to vote.
A Windows control for selecting objects in Active Directory.

Picker control test app


A basic Windows control library for selecting objects in your Active Directory.


I've been involved in several Active Directory projects and frequently have had the need for a "picker" utility to select objects in the AD hierarchy. I decided to roll my own and encapsulate it in a Windows control library.

Sample Usage

Add the control to the list of Windows Forms controls in Visual Studio .NET, then drag the control onto a Windows Form. The control will automatically obtain your Active Directory root path and begin building a hierachal tree of the objects it finds.

private void AddTreeNodes(TreeNode node)
    Cursor.Current = Cursors.WaitCursor;
    adh = new ADHelper();
    IDictionaryEnumerator enumerator = adh.Children.GetEnumerator();

    // append children
    while (enumerator.MoveNext())
        TreeNode childNode = new TreeNode((string)enumerator.Key);
        childNode.Tag = enumerator.Value; // ADsPath

        // specific object types
        if (!alExceptions.Contains(node.Text))
            childNode.ImageIndex =
            childNode.ImageIndex = 3; // computer image
    Cursor.Current = Cursors.Default;

AddTreeNodes() takes only one parameter, the parent TreeNode object. It then proceeds to add every child object it finds. Similar to Microsoft's ADSI Edit tool, the control displays a plus sign to indicate if a node has one or more child nodes.

Returning the ADsPath

Each time a node is selected in the hierarchy, the ADsPath public property is updated to reflect the fully-qualified path to the object (i.e. LDAP://OU=DEV,OU=US,DC=CORPORATE,DC=MYDOMAIN,DC=COM).

public void GetChildEntries(string adspath)
    if (adspath.Length > 0)
        entry = new DirectoryEntry(adspath);
        entry = new DirectoryEntry();

    foreach (DirectoryEntry childEntry in entry.Children)
        _htChildren.Add(childEntry.Name, childEntry.Path);
private void treeView1_AfterSelect(object sender, 
      System.Windows.Forms.TreeViewEventArgs e)
    _adspath = (string)e.Node.Tag;


The control has been tested on Windows 2000/XP/2003. It should work for Windows 9x/NT with the Microsoft Active Directory Client Extensions installed.


  • Version 1.0 - 04.22.2004 - First release version.
  • Version 1.1 - 04.28.2004 - Added image support for object types.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Marc Merritt
United States United States
I live in southeastern Pennsylvania, USA with my lovely wife and two beautiful daughters. Life is good. My hobbies are motorcycles, motorcycles, and motorcycles.

I run a riders group called Twisties Motorcycle Club. If you're are a rider in the tri-state area, look us up!
Follow on   Twitter

Comments and Discussions

GeneralThe doubled child items [modified] Pinmemberpsychic8628-Jul-08 22:23 
GeneralRe: The doubled child items Pinmembergisli.gudmundsson15-Feb-10 12:38 
GeneralRe: The doubled child items Pinmembergisli.gudmundsson15-Feb-10 12:57 
GeneralRe: The doubled child items Pinmembergisli.gudmundsson15-Feb-10 14:02 
GeneralThank you very much Pinmemberlucastar17-Jan-08 19:42 
GeneralRe: Thank you very much PinmemberMarc Merritt24-Jan-08 4:05 
GeneralRe: Thank you very much Pinmemberlucastar5-Feb-08 7:31 
GeneralThanks Pinmemberhkdl200027-Jun-07 9:46 
GeneralRe: Thanks PinmemberMarc Merritt28-Jun-07 17:10 
GeneralOUs are doubled Pinmemberandrei_teodorescu8-Jul-06 17:05 
GeneralRe: OUs are doubled Pinmembersebaj24-Feb-07 5:21 
GeneralNames ordered AD Pinmembertysonx6-Jun-06 5:17 
GeneralRe: Names ordered AD PinmemberMarc Merritt12-Jun-06 3:07 
QuestionHow can i get the selected object? Pinmemberrbmrf9-Mar-06 8:29 
AnswerRe: How can i get the selected object? PinmemberMarc Merritt9-Mar-06 8:48 
AnswerRe: How can i get the selected object? PinmemberData-Base17-Jul-08 4:53 
QuestionSorted Output? PinmemberVBDelinquent19-Dec-05 4:41 
AnswerRe: Sorted Output? PinmemberMarc Merritt22-Dec-05 8:00 
GeneralHelp Using in VS2005 Pinmemberastocks19-Oct-05 17:50 
GeneralRe: Help Using in VS2005 PinmemberMarc Merritt20-Oct-05 2:27 
GeneralRe: Help Using in VS2005 Pinmemberastocks20-Oct-05 10:48 
GeneralRe: Help Using in VS2005 PinmemberMarc Merritt20-Oct-05 12:40 
GeneralRe: Help Using in VS2005 Pinmemberastocks21-Oct-05 15:17 
QuestionSpecified domain does not exist Pinmembergiles papworth6-Sep-05 0:58 
AnswerRe: Specified domain does not exist PinmemberMarc Merritt12-Sep-05 4:48 

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 | Terms of Use | Mobile
Web04 | 2.8.150414.1 | Last Updated 17 May 2004
Article Copyright 2004 by Marc Merritt
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid