/// <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 textBox_MouseDown(object sender, MouseEventArgs e, string[] columnHeaders, EnhancedTextBoxHelperList.ViewMode viewMode, Action postSetFunc)
        {
            if (e.Button == MouseButtons.Right)
            {
                TextBox textBox = (TextBox)sender;
                EnhancedTextBoxHelper.Items[] items = GetItems(textBox);

                if (textBox != null && items != null)
                {
                    if (textBox.Enabled && !textBox.ReadOnly)
                    {
                        textBox.Focus();
                        EnhancedTextBoxHelperList enhancedTextBoxHelperList = new EnhancedTextBoxHelperList(textBox, columnHeaders, items, textBox.Text, viewMode, postSetFunc);
                        enhancedTextBoxHelperList.ShowDialog();
                    }
                }
            }
        }
        /// <summary>
        /// Attach the helper to a textbox
        /// </summary>
        /// <param name="textBox"></param>
        /// <param name="enableDeselectOnEsc"></param>
        /// <param name="enableShowListOnRightclick"></param>
        /// <param name="enableTooltip"></param>
        /// <param name="columnHeaders"></param>
        /// <param name="items"></param>
        /// <param name="viewMode"></param>
        /// <param name="postSetFunc"></param>
        public static void AttachTextBox(TextBox textBox, bool enableDeselectOnEsc, bool enableShowListOnRightclick, bool enableTooltip, string[] columnHeaders, EnhancedTextBoxHelper.Items[] items, EnhancedTextBoxHelperList.ViewMode viewMode, Action postSetFunc)
        {
            CleanLists();

            if (textBox == null)
                return;

            UpdateItems(textBox, items, true);

            if (enableDeselectOnEsc)
                SetDeselectOnEsc(textBox);

            if (enableShowListOnRightclick && columnHeaders != null)
                SetShowListOnRightClick(textBox, columnHeaders, viewMode, postSetFunc, true);

            if (enableTooltip)
                SetToolTipOnMouseOver(textBox);
        }
        /// <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 textBox_MouseDown(object sender, MouseEventArgs e, string[] columnHeaders, EnhancedTextBoxHelperList.ViewMode viewMode, Action postSetFunc)
        {
            if (e.Button == MouseButtons.Right)
            {
                TextBox textBox = (TextBox)sender;
                EnhancedTextBoxHelper.Items[] items = GetItems(textBox);

                if (textBox != null && items != null)
                {
                    if (textBox.Enabled && !textBox.ReadOnly)
                    {
                        textBox.Focus();
                        EnhancedTextBoxHelperList enhancedTextBoxHelperList = new EnhancedTextBoxHelperList(textBox, columnHeaders, items, textBox.Text, viewMode, postSetFunc);
                        enhancedTextBoxHelperList.ShowDialog();
                    }
                }
            }
        }
 /// <summary>
 /// Attache the show list on right click event
 /// </summary>
 /// <param name="textBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="viewMode"></param>
 /// <param name="postSetFunc"></param>
 /// <param name="drawInfoicon"></param>
 private static void SetShowListOnRightClick(TextBox textBox, string[] columnHeaders, EnhancedTextBoxHelperList.ViewMode viewMode, Action postSetFunc, bool drawInfoicon)
 {
     if (textBox != null)
     {
         if (!_attached_MouseDown.ContainsKey(textBox))
         {
             _attached_MouseDown.Add(textBox, new MouseEventHandler((sender, e) => textBox_MouseDown(sender, e, columnHeaders, viewMode, postSetFunc)));
             if (drawInfoicon && textBox.Parent != null)
                 textBox.Parent.Paint += new PaintEventHandler((sender, e) => textBox_PaintInfoicon(sender, e, textBox));
         }
         else
         {
             textBox.MouseDown -= _attached_MouseDown[textBox];
             _attached_MouseDown[textBox] = new MouseEventHandler((sender, e) => textBox_MouseDown(sender, e, columnHeaders, viewMode, postSetFunc));
         }
         textBox.MouseDown += _attached_MouseDown[textBox];
     }
 }
 /// <summary>
 /// Attach the helper to a textbox, set the view mode, deselect enabled, showlist enabled, tooltip enabled
 /// </summary>
 /// <param name="textBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="items"></param>
 /// <param name="viewMode"></param>
 public static void AttachTextBox(TextBox textBox, string[] columnHeaders, EnhancedTextBoxHelper.Items[] items, EnhancedTextBoxHelperList.ViewMode viewMode)
 {
     AttachTextBox(textBox, true, true, true, columnHeaders, items, viewMode, null);
 }
 /// <summary>
 /// Attach the helper to a textbox, set the view mode, deselect enabled, showlist enabled, tooltip enabled
 /// </summary>
 /// <param name="textBox"></param>
 /// <param name="columnHeaders"></param>
 /// <param name="items"></param>
 /// <param name="viewMode"></param>
 /// <param name="postSetFunc"></param>
 public static void AttachTextBox(TextBox textBox, string[] columnHeaders, EnhancedTextBoxHelper.Items[] items, EnhancedTextBoxHelperList.ViewMode viewMode, Action postSetFunc)
 {
     AttachTextBox(textBox, true, true, true, columnHeaders, items, viewMode, postSetFunc);
 }