public class MyComboBoxAutoComplete : MyComboBox { #region Declarations private bool InEditMode = true; #endregion #region Constructor public MyComboBoxAutoComplete() { this.DropDownStyle = ComboBoxStyle.DropDown; this.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.AutoCompleteSource = AutoCompleteSource.ListItems; } #endregion #region Properties [DefaultValue(typeof(ComboBoxStyle), "DropDown")] public new ComboBoxStyle DropDownStyle { get { return base.DropDownStyle; } set { base.DropDownStyle = value; } } [DefaultValue(typeof(AutoCompleteMode), "SuggestAppend")] public new AutoCompleteMode AutoCompleteMode { get { return base.AutoCompleteMode; } set { base.AutoCompleteMode = value; } } [DefaultValue(typeof(AutoCompleteSource), "ListItems")] public new AutoCompleteSource AutoCompleteSource { get { return base.AutoCompleteSource; } set { base.AutoCompleteSource = value; } } #endregion #region Events protected override void OnBindingContextChanged(EventArgs e) { this.DropDownStyle = ComboBoxStyle.DropDown; base.OnBindingContextChanged(e); } protected override void OnValidating(CancelEventArgs e) { int index = this.FindStringExact(this.Text); if (index >= 0) base.OnValidating(e); else if (this.Text.Trim() == "") { // do nothing } else e.Cancel = true; } protected override void OnKeyDown(KeyEventArgs e) { this.InEditMode = (e.KeyCode != Keys.Back && e.KeyCode != Keys.Delete); base.OnKeyDown(e); } protected override void OnTextChanged(EventArgs e) { if (this.InEditMode) { int index = this.FindString(this.Text); if (index < 0 && this.Text.Trim() != "") { this.InEditMode = false; this.Text = this.Text.Substring(0, this.Text.Length - 1); this.InEditMode = true; this.Select(this.Text.Length, this.Text.Length); } } base.OnTextChanged(e); } #endregion }That might help get you started with your own.