Click here to Skip to main content
Licence 
First Posted 25 Apr 2004
Views 141,185
Bookmarked 57 times

Active Directory object picker control

By | 16 May 2004 | Article
A Windows control for selecting objects in Active Directory.

Picker control test app

Introduction

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

Background

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;
    treeView1.BeginUpdate();
    adh = new ADHelper();
    adh.GetChildEntries((string)node.Tag);
    IDictionaryEnumerator enumerator = adh.Children.GetEnumerator();

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


        // specific object types
        if (!alExceptions.Contains(node.Text))
            childNode.ImageIndex =
                SetImageIndex(enumerator.Key.ToString().Substring(0,2));
        else
            childNode.ImageIndex = 3; // computer image
    }
    treeView1.EndUpdate();
    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);
    else
        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;
}

Compatibility

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.

History

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

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

Marc Merritt

Technical Lead
Motorcycle Road Racing Forums
United States United States

Member

Follow on Twitter Follow on Twitter
I live in southeastern Pennsylvania, USA with my lovely wife and two beautiful daughters. Life is good. My hobbies are motorcycles, motorcycles, and motorcycles.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralThe doubled child items [modified] Pinmemberpsychic8621:23 28 Jul '08  
GeneralRe: The doubled child items Pinmembergisli.gudmundsson11:38 15 Feb '10  
GeneralRe: The doubled child items Pinmembergisli.gudmundsson11:57 15 Feb '10  
GeneralRe: The doubled child items Pinmembergisli.gudmundsson13:02 15 Feb '10  
GeneralThank you very much Pinmemberlucastar18:42 17 Jan '08  
GeneralRe: Thank you very much PinmemberMarc Merritt3:05 24 Jan '08  
GeneralRe: Thank you very much Pinmemberlucastar6:31 5 Feb '08  
GeneralThanks Pinmemberhkdl20008:46 27 Jun '07  
GeneralRe: Thanks PinmemberMarc Merritt16:10 28 Jun '07  
GeneralOUs are doubled Pinmemberandrei_teodorescu16:05 8 Jul '06  
GeneralRe: OUs are doubled Pinmembersebaj4:21 24 Feb '07  
GeneralNames ordered AD Pinmembertysonx4:17 6 Jun '06  
GeneralRe: Names ordered AD PinmemberMarc Merritt2:07 12 Jun '06  
QuestionHow can i get the selected object? Pinmemberrbmrf7:29 9 Mar '06  
AnswerRe: How can i get the selected object? PinmemberMarc Merritt7:48 9 Mar '06  
AnswerRe: How can i get the selected object? PinmemberData-Base3:53 17 Jul '08  
I like to know how I can use it in my program !?!
 
how I can give it the domain and the admin username and password
 
and get the selected OU so I can create users in?
 

I'm new to this and I like to learn it
 

Thank
QuestionSorted Output? PinmemberVBDelinquent3:41 19 Dec '05  
AnswerRe: Sorted Output? PinmemberMarc Merritt7:00 22 Dec '05  
GeneralHelp Using in VS2005 Pinmemberastocks16:50 19 Oct '05  
GeneralRe: Help Using in VS2005 PinmemberMarc Merritt1:27 20 Oct '05  
GeneralRe: Help Using in VS2005 Pinmemberastocks9:48 20 Oct '05  
GeneralRe: Help Using in VS2005 PinmemberMarc Merritt11:40 20 Oct '05  
GeneralRe: Help Using in VS2005 Pinmemberastocks14:17 21 Oct '05  
QuestionSpecified domain does not exist Pinmembergiles papworth23:58 5 Sep '05  
AnswerRe: Specified domain does not exist PinmemberMarc Merritt3:48 12 Sep '05  

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.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120529.1 | Last Updated 17 May 2004
Article Copyright 2004 by Marc Merritt
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid