Услуги Сертификаты Новости Статьи База знаний Алгоритмы Портфолио Скачать Ссылки Поиск
Услуги arrow Новости arrow C# ComboBox add ToolTip to control
C# ComboBox add ToolTip to control Версия для печати Отправить на e-mail
06.03.2012

В случае, если Вам нужно, чтобы не поместившийся текст надписи в ComboBox на экране содержал всплывающую подсказку при наведении на control указателя мыши, можно переопределить стандартный ComboBox и добавить ему соответствующий функционал.

Пример:

  1. /// <summary>
  2. /// ComboBox
  3. /// </summary>
  4. public class CustomComboBox : ComboBox
  5. {
  6.     public CustomComboBox() { }
  7.     /// <summary>
  8.     /// Тултип, ассоциированный с этим control-ом
  9.     /// </summary>
  10.     ToolTip ttToolTip;
  11.     private void SetToolTipText(string text)
  12.     {
  13.         if (NotAllTextShownAutoToolTip)
  14.         {
  15.             if (this.ttToolTip == null)
  16.             {
  17.                 this.ttToolTip = new ToolTip();
  18.             }
  19.             if (string.IsNullOrEmpty(text))
  20.             {
  21.                 this.ttToolTip.RemoveAll();
  22.             }
  23.             else
  24.             {
  25.                 this.ttToolTip.SetToolTip(this, this.Text);
  26.             }
  27.         }
  28.     }
  29.     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
  30.     static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
  31.     private const UInt32 WM_MOUSEWHEEL = 0x020A;
  32.     private const UInt32 WM_MOUSEHOVER = 0x02A1;
  33.     private const UInt32 WM_MOUSELEAVE = 0x02A3;
  34.     protected override void WndProc(ref Message m)
  35.     {
  36.         if (m.Msg == WM_MOUSEWHEEL)
  37.         {
  38.             SendMessage(this.Parent.Handle, WM_MOUSEWHEEL, m.WParam, m.LParam);
  39.         }
  40.         base.WndProc(ref m);
  41.         if (m.Msg == WM_MOUSEHOVER)
  42.         {
  43.             if (this.IndicateNotAllTextShown)
  44.             {
  45.                 var textSize = TextRenderer.MeasureText(this.Text, this.Font, this.Size, TextFormatFlags.TextBoxControl);
  46.                 if (textSize.Width > this.Width)
  47.                 {
  48.                     // не пароль - показывать ToolTip
  49.                     SetToolTipText(this.Text);
  50.                 }
  51.                 else
  52.                 {
  53.                     // текст поместился, ToolTip не показывать.
  54.                     SetToolTipText(null);
  55.                 }
  56.             }
  57.         }
  58.         if (m.Msg == WM_MOUSELEAVE)
  59.         {
  60.             SetToolTipText(null);
  61.         }        
  62.     }
  63.     [DefaultValue(true)]
  64.     [Description("Показывать, что не весь текст поместился")]
  65.     [Category("Индикация превышения размера текста")]
  66.     public bool IndicateNotAllTextShown { get; set; }
  67.     [DefaultValue(true)]
  68.     [Description("Если не весь текст поместился - показывать полный текст в подсказке")]
  69.     [Category("Индикация превышения размера текста")]
  70.     public bool NotAllTextShownAutoToolTip { get; set; }
  71. }
* This source code was highlighted with Source Code Highlighter.

PS: если Вам была полезна данная статья, поддержите наш ресурс, нажмите кнопочку "+1" вверху страницы. Спасибо!

Последнее обновление ( 07.03.2012 )
 
< Пред.   След. >