using System; using System.Windows.Forms; namespace ComboBoxTest { class AutoCompleteComboBox : ComboBox { // Track if a special key is pressed // (in which case the text replacement operation will be skipped). private bool controlKey = false; // Determine whether a special key was pressed. protected override void OnKeyPress( System.Windows.Forms.KeyPressEventArgs e) { base.OnKeyPress(e); if (e.KeyChar == (int)Keys.Escape) { // Clear the text. this.SelectedIndex = -1; this.Text = ""; controlKey = true; } else if (Char.IsControl(e.KeyChar)) { controlKey = true; } else { controlKey = false; } } // Perform the text substitution. protected override void OnTextChanged(System.EventArgs e) { base.OnTextChanged(e); if (this.Text != "" && !controlKey) { // Search for a matching entry. string matchText = this.Text; int match = this.FindString(matchText); // If a matching entry is found, insert it now. if (match != -1) { this.SelectedIndex = match; // Select the added text so it can be replaced // if the user keeps typing. this.SelectionStart = matchText.Length; this.SelectionLength = this.Text.Length - this.SelectionStart; } } } } }