Click here to Skip to main content
15,888,579 members
Articles / Programming Languages / C#

A .NET Wizard control

Rate me:
Please Sign up or sign in to vote.
4.86/5 (89 votes)
24 Apr 2003CPOL7 min read 663.1K   8.7K   216  
A .NET Wizard control for the VS.IDE and client apps
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using UtilityLibrary.Win32;
using UtilityLibrary.General;
using UtilityLibrary;


namespace UtilityLibrary.Combos
{ 
  [ToolboxItem(true)]
  [ToolboxBitmap(typeof(UtilityLibrary.Combos.CheckCombo), "UtilityLibrary.Combos.CheckCombo.bmp")]
  public class CheckCombo : TreeCombo
  {
    #region Class members
    ArrayList m_checked = new ArrayList( 20 );
    #endregion

    #region Class Properties
    [Browsable(false)]
    public ArrayList CheckedItems
    {
      get
      {
        return m_checked;
      }
    }
    #endregion

    #region Constructor
    public CheckCombo()
    {
    }
    #endregion

    #region Class Overrides
    protected override void OnDropDownControlBinding( CustomCombo.EventArgsBindDropDownControl e )
    {
      base.OnDropDownControlBinding( e );
      
      TreeView tree = (TreeView)e.BindedControl;
      tree.CheckBoxes = true;
      tree.FullRowSelect = true;
      tree.HideSelection = false;
      tree.ShowLines = false;
      tree.ShowPlusMinus = false;
      tree.ShowRootLines = false;
      tree.Sorted = true;
      
      tree.AfterCheck += new TreeViewEventHandler( tree_AfterCheck );
    }

    protected override void OnCloseDropDownHandler( object sender, CustomCombo.EventArgsCloseDropDown e )
    {
      base.Value = CalculateValue();
    }

    protected override bool OnValueValidate( string value )
    {
      //TODO: parsing of new value
      return true;
    }
    #endregion

    #region Class Helper methods
    private string CalculateValue()
    {
      string outString = "";
      
      foreach( TreeNode node in m_checked )
      {
        outString += node.Text;
        outString += ", ";
      }

      if( outString.Length > 2 )
        outString = outString.Remove( outString.Length - 2, 2 );
      
      return outString;
    }

    private void tree_AfterCheck( object sender, System.Windows.Forms.TreeViewEventArgs e )
    {
      if( e.Node.Checked == true )
      {
        if( m_checked.Contains( e.Node ) == false )
          m_checked.Add( e.Node );
      }
      else
      {
        if( m_checked.Contains( e.Node ) == true )
          m_checked.Remove( e.Node );
      }

      base.Value = CalculateValue();
    }
    #endregion

    #region Class Public methods
    public void CheckAll()
    {
      BeginUpdate();
      
      TreeNode[] tree = TreeViewUtils.ToPlainArray( m_tree );
      m_checked.Clear();
      
      foreach( TreeNode node in tree )
      {
        m_checked.Add( node );
        node.Checked = true;
      } 

      EndUpdate();
      Invalidate();
      base.Value = CalculateValue();
    }
    
    public void UnCheckAll()
    {
      BeginUpdate();

      TreeNode[] tree = TreeViewUtils.ToPlainArray( m_tree );
      m_checked.Clear();
      
      foreach( TreeNode node in tree )
      {
        node.Checked = false;
      } 

      EndUpdate();
      Invalidate();
      base.Value = CalculateValue();
    }
    #endregion

    protected override void OnTreeItemChanged(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
      // do nothing here for correct update of data
    }

  }
}

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 Code Project Open License (CPOL)


Written By
CEO ArtfulBits Inc.
Ukraine Ukraine
Name:Kucherenko Oleksandr

Born:September 20, 1979

Platforms: Win32, Linux; - well known and MS-DOS; Win16; OS/2 - old time not touched;

Hardware: IBM PC

Programming Languages: Assembler (for Intel 80386); Borland C/C++; Borland Pascal; Object Pascal; Borland C++Builder; Delphi; Perl; Java; Visual C++; Visual J++; UML; XML/XSL; C#; VB.NET; T-SQL; PL/SQL; and etc.

Development Environments: MS Visual Studio 2001-2008; MS Visual C++; Borland Delphi; Borland C++Builder; C/C++ any; Rational Rose; GDPro; Together and etc.

Libraries: STL, ATL, WTL, MFC, NuMega Driver Works, VCL; .NET 1.0, 1.1, 2.0, 3.5; and etc.

Technologies: Client/Server; COM; DirectX; DirectX Media; BDE; HTML/DHTML; ActiveX; Java Servlets; DCOM; COM+; ADO; CORBA; .NET; Windows Forms; GDI/GDI+; and etc.

Application Skills: Databases - design and maintain, support, programming; GUI Design; System Programming, Security; Business Software Development. Win/Web Services development and etc.

Comments and Discussions