/// <summary>
        /// Default attached event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="columnHeaders"></param>
        /// <param name="viewMode"></param>
        /// <param name="postSetFunc"></param>
        private static void comboBox_MouseDown(object sender, MouseEventArgs e, string[] columnHeaders, EnhancedComboBoxHelperList.ViewMode viewMode, Action postSetFunc)
        {
            if (e.Button == MouseButtons.Right)
            {
                ComboBox comboBox = (ComboBox)sender;
                EnhancedComboBoxHelper.Items[] items = GetItems(comboBox);

                if (comboBox.Enabled)
                {
                    comboBox.Focus();
                    EnhancedComboBoxHelperList enhancedComboBoxHelperList = new EnhancedComboBoxHelperList(comboBox, columnHeaders, items, comboBox.SelectedValue, viewMode, postSetFunc);
                    enhancedComboBoxHelperList.ShowDialog();
                }
            }
        }
 /// <summary>
 /// Attach the show list on right click event
 /// </summary>
 /// <param name="comboBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="viewMode"></param>
 /// <param name="postSetFunc"></param>
 /// <param name="drawInfoicon"></param>
 private static void SetShowListOnRightClick(ComboBox comboBox, string[] columnHeaders, EnhancedComboBoxHelperList.ViewMode viewMode, Action postSetFunc, bool drawInfoicon)
 {
     if (comboBox != null)
     {
         if (!_attached_MouseDown.ContainsKey(comboBox))
         {
             _attached_MouseDown.Add(comboBox, new MouseEventHandler((sender, e) => comboBox_MouseDown(sender, e, columnHeaders, viewMode, postSetFunc)));
             if (drawInfoicon && comboBox.Parent != null)
             {
                 comboBox.Parent.Paint += new PaintEventHandler((sender, e) => comboBox_PaintInfoicon(sender, e, comboBox));
             }
         }
         else
         {
             comboBox.MouseDown           -= _attached_MouseDown[comboBox];
             _attached_MouseDown[comboBox] = new MouseEventHandler((sender, e) => comboBox_MouseDown(sender, e, columnHeaders, viewMode, postSetFunc));
         }
         comboBox.MouseDown += _attached_MouseDown[comboBox];
     }
 }
 /// <summary>
 /// Attach the helper to a combobox, set the view mode, autocomplete enabled, deselect enabled, showlist enabled
 /// </summary>
 /// <param name="comboBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="items"></param>
 /// <param name="viewMode"></param>
 /// <param name="postSetFunc"></param>
 public static void AttachComboBox(ComboBox comboBox, string[] columnHeaders, EnhancedComboBoxHelper.Items[] items, EnhancedComboBoxHelperList.ViewMode viewMode, Action postSetFunc)
 {
     AttachComboBox(comboBox, true, true, true, true, columnHeaders, items, viewMode, postSetFunc);
 }
 /// <summary>
 /// Attach the helper to a combobox, set the view mode, autocomplete enabled, deselect enabled, showlist enabled, tooltip enabled
 /// </summary>
 /// <param name="comboBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="items"></param>
 /// <param name="viewMode"></param>
 public static void AttachComboBox(ComboBox comboBox, string[] columnHeaders, EnhancedComboBoxHelper.Items[] items, EnhancedComboBoxHelperList.ViewMode viewMode)
 {
     AttachComboBox(comboBox, true, true, true, true, columnHeaders, items, viewMode, null);
 }
        /// <summary>
        /// Attach the helper to a combobox
        /// </summary>
        /// <param name="comboBox"></param>
        /// <param name="enableAutoCompleteOnEnter"></param>
        /// <param name="enableDeselectOnEsc"></param>
        /// <param name="enableShowListOnRightclick"></param>
        /// <param name="columnHeaders"></param>
        /// <param name="items"></param>
        /// <param name="viewMode"></param>
        /// <param name="postSetFunc"></param>
        public static void AttachComboBox(ComboBox comboBox, bool enableAutoCompleteOnEnter, bool enableDeselectOnEsc, bool enableShowListOnRightclick, bool enableTooltip, string[] columnHeaders, EnhancedComboBoxHelper.Items[] items, EnhancedComboBoxHelperList.ViewMode viewMode, Action postSetFunc)
        {
            CleanLists();

            if (comboBox == null)
            {
                return;
            }

            UpdateItems(comboBox, items, true);

            if (enableAutoCompleteOnEnter)
            {
                SetAutoCompleteOnEnter(comboBox);
            }

            if (enableDeselectOnEsc)
            {
                SetDeselectOnEsc(comboBox);
            }

            if (enableShowListOnRightclick && columnHeaders != null)
            {
                SetShowListOnRightClick(comboBox, columnHeaders, viewMode, postSetFunc, true);
            }

            if (enableTooltip)
            {
                SetToolTipOnMouseOver(comboBox);
            }
        }