Auto Complete ComboBox : ComboBox « Components « C# / C Sharp






Auto Complete ComboBox

Auto Complete ComboBox

  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;

  public class Form1 : System.Windows.Forms.Form
  {
    private AutoCompleteComboBox combo; 

    public Form1()
    {
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(292, 273);

      combo = new AutoCompleteComboBox();
      combo.Location = new System.Drawing.Point(64, 32);
      combo.Size = new System.Drawing.Size(150, 20);

            combo.Items.Add("Aaaaaa");
            combo.Items.Add("Bbbbbbbbb");
            combo.Items.Add("Ccccccccccc");
      
      Controls.Add(combo);
      CenterToScreen();
    }

    static void Main() 
    {
      Application.Run(new Form1());
    }
  }
    
    public class AutoCompleteComboBox : System.Windows.Forms.ComboBox
    {
        public event System.ComponentModel.CancelEventHandler NotInList;

        private bool strict = true;
        private bool isEditing = false;

        public AutoCompleteComboBox() : base() {
        }

        public bool Strict
        {
            get { return strict; }
            set { strict = value; }
        }

        protected virtual void OnNotInList(System.ComponentModel.CancelEventArgs e)
        {
            if (NotInList != null)
            {
                NotInList(this, e);
            }
        }   

        protected override void OnTextChanged(System.EventArgs e)
        {
            if (isEditing)
            {
                string input = Text;
                int index = this.FindString(input);

                if (index >= 0)
                {
                    isEditing = false;
                    SelectedIndex = index;
                    isEditing = true;
                    Select(input.Length, Text.Length);
                }
            }

            base.OnTextChanged(e);
        }

        protected override void OnValidating(System.ComponentModel.CancelEventArgs e)
        {
            if (this.Strict)
            {
                int pos = this.FindStringExact(this.Text);
        
                if (pos == -1)
                {
                    OnNotInList(e);
                }
                else
                {
                    this.SelectedIndex = pos;
                }
            }

            base.OnValidating(e);
        }

        protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
        {
            isEditing = (e.KeyCode != Keys.Back && e.KeyCode != Keys.Delete);
            base.OnKeyDown(e);
        }
    }

           
       








Related examples in the same category

1.Buildin AutoCompleteMode for ComboBoxBuildin AutoCompleteMode for ComboBox
2.Use an Autocomplete Combo BoxUse an Autocomplete Combo Box