Click here to Skip to main content
15,895,777 members
Articles / Desktop Programming / Windows Forms

A Serious Outlook Style Navigation Pane Control

Rate me:
Please Sign up or sign in to vote.
4.94/5 (135 votes)
15 Nov 2010CC (ASA 2.5)6 min read 1.3M   72.1K   518  
A quality rendered Outlook style navigation pane control
#region License and Copyright

/*
 
Author:  Jacob Mesu
 
Attribution-Noncommercial-Share Alike 3.0 Unported
You are free:

    * to Share — to copy, distribute and transmit the work
    * to Remix — to adapt the work

Under the following conditions:

    * Attribution — You must attribute the work and give credits to the author or guifreaks.net
    * Noncommercial — You may not use this work for commercial purposes. If you want to adapt
      this work for a commercial purpose, visit guifreaks.net and request the Attribution-Share 
      Alike 3.0 Unported license for free. 

http://creativecommons.org/licenses/by-nc-sa/3.0/

*/
#endregion

using System.Collections;

namespace Guifreaks.Common
{
   /// <summary>
   /// The basic collection class with events which notifies when new items have been added or removed
   /// </summary>
   /// <remarks>
   /// This class can be usefull when a container class needs to now which object have been added to
   /// the collection or have been removed. This is especially usefull when you want the child controls
   /// to appear in the document outline (Visual Studio only). The child controls needs to be part of
   /// the controls collection to achieve this. You can use the events <see cref="ItemAdded"/> and
   /// <see cref="ItemRemoved"/> to add or remove the controls from the Controls collection. 
   /// </remarks>
   /// <example>TODO</example>
   public class ChildControlCollection : CollectionBase
   {
      #region Fields

      CollectionEventHandler m_itemAdded;
      CollectionEventHandler m_itemRemoved;
      protected bool notify = true;

      #endregion

      #region Constructor

      /// <summary>
      /// Initializes a new instance of the ChildControlCollection class
      /// </summary>
      public ChildControlCollection()
         : base()
      {
      }

      #endregion

      #region Properties
      #endregion

      #region Methods

      /// <summary>
      // Sorts the elements in the entire collection using the specified comparer.
      /// </summary>
      /// <param name="comparer">The IComparer implementation to use when comparing elements.</param>
      public virtual void Sort(IComparer comparer)      
      {
         InnerList.Sort(comparer);
      }

      #endregion

      #region Overrides

      /// <summary>
      /// Overriden. Raises the Removed event 
      /// </summary>      
      protected override void OnRemoveComplete(int index, object value)
      {
         base.OnRemoveComplete(index, value);
         CollectionEventHandler handler = m_itemRemoved;
         if ((handler != null)
         && notify)
         {
            handler(this, new ChildCollectionEventArgs(value));
         }
      }

      /// <summary>
      /// Overriden. Raises the item added event 
      /// </summary>      
      protected override void OnInsertComplete(int index, object value)
      {
         base.OnInsertComplete(index, value);
         CollectionEventHandler handler = m_itemAdded;
         if ((handler != null)
         && notify)
         {
            handler(this, new ChildCollectionEventArgs(value));
         }
      }

      #endregion

      #region Event Handling

      /// <summary>
      /// Occurs when an item has been added to the collection
      /// </summary>
      public event CollectionEventHandler ItemAdded
      {
         add { m_itemAdded += value; }
         remove { m_itemAdded -= value; }
      }

      /// <summary>
      /// Occurs when an item has been removed from the collection
      /// </summary>
      public event CollectionEventHandler ItemRemoved
      {
         add { m_itemRemoved += value; }
         remove { m_itemRemoved -= value; }
      }

      #endregion
   }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Creative Commons Attribution-ShareAlike 2.5 License


Written By
Architect
Netherlands Netherlands
I design software for a ERP software vendor in the Netherlands.

For more information, the latest version installer etc goto guifreaks.net

Comments and Discussions