Добавление всплывающих подсказок к CheckedListBox

Однажды, в процессе работы у меня возника ситуация, когда необходимо было для позиций CheckedListBox-а выводить всплывающую подсказку. Разработчики контрола не предусмотрели эту возможность и мне пришлось решать проблему самому.

Для начала создадим новое Windows Forms Application. Поместим на форму CheckedListBox.


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

DataTable FillCheckedListBox()
{
   DataTable dt = new DataTable();

   //добавляем колонки в таблицу
   dt.Columns.Add("ID");
   dt.Columns.Add("Name");
   dt.Columns.Add("Tip");

   //добавляем строки
   DataRow rowOrange = dt.NewRow();
   rowOrange[0] = 1;
   rowOrange[1] = "Апельсин";
   rowOrange[2] = "Всплывающая подсказка для апельсина";
   dt.Rows.Add(rowOrange);

   DataRow rowApple = dt.NewRow();
   rowApple[0] = 2;
   rowApple[1] = "Яблоко";
   rowApple[2] = "Всплывающая подсказка для яблока";
   dt.Rows.Add(rowApple);

   DataRow rowBanana = dt.NewRow();
   rowBanana[0] = 3;
   rowBanana[1] = "Банан";
   rowBanana[2] = "Всплывающая подсказка для банана";
   dt.Rows.Add(rowBanana);

   return dt;
}

Теперь объявим скрытое поле нашего класса типа DataTable и в конструкторе нашей формы заполним CheckedListBox. Также, подпишемся на событие MouseMove для нашего CheckedListBox:

//обявляем поле типа DataTable
DataTable dt;

Объявим екземпляр класса ToolTip – всплывающе подсказки:

//объявляем екземпляр ToolTip
ToolTip tp = new ToolTip();

В конструкторе нашей формы заполним наш CheckedListBox и подпишемcя на событие MouseMove:

//заполняем DataTable
dt = FillCheckedListBox();

//подключаем DataTable к нашему CheckedListBox
checkedListBox1.DataSource = dt;
//задаем значение
checkedListBox1.ValueMember = dt.Columns[0].ColumnName;
//задаем значение, которое будет отображаться
checkedListBox1.DisplayMember = dt.Columns[1].ColumnName;
//подключаем событие MouseMove
checkedListBox1.MouseMove += new MouseEventHandler(checkedListBox1_MouseMove);

Событие MouseMove:

//получаем индекс, над которым в данный момент находится мышка
int index = checkedListBox1.IndexFromPoint(e.Location);

if (index >= 0)
{
   //отображаем всплывающую подсказку
   tp.SetToolTip(checkedListBox1, dt.Rows[index]["Tip"].ToString());
}

Осталось скомпилировать приложение.

Вот и все…

Привожу полный листинг:

public partial class Form1 : Form
{
   //обявляем поле типа DataTable
   DataTable dt;
   public Form1()
   {
      InitializeComponent();

      //заполняем DataTable
      dt = FillCheckedListBox();

      //подключаем DataTable к нашему CheckedListBox
      checkedListBox1.DataSource = dt;
      //задаем значение
      checkedListBox1.ValueMember = dt.Columns[0].ColumnName;
      //задаем значение, которое будет отображаться
      checkedListBox1.DisplayMember = dt.Columns[1].ColumnName;
      //подключаем событие MouseMove
      checkedListBox1.MouseMove += new MouseEventHandler(checkedListBox1_MouseMove);
   }

   //объявляем екземпляр ToolTip
   ToolTip tp = new ToolTip();

   //событие MouseMove
   void checkedListBox1_MouseMove(object sender, MouseEventArgs e)
   {
      //получаем индекс, над которым в данный момент находится мышка
      int index = checkedListBox1.IndexFromPoint(e.Location);

      if (index >= 0)
      {
         //отображаем всплывающую подсказку
         tp.SetToolTip(checkedListBox1, dt.Rows[index]["Tip"].ToString());
      }
   }

   DataTable FillCheckedListBox()
   {
      DataTable dt = new DataTable();

      //добавляем колонки в таблицу
      dt.Columns.Add("ID");
      dt.Columns.Add("Name");
      dt.Columns.Add("Tip");

      //добавляем строки
      DataRow rowOrange = dt.NewRow();
      rowOrange[0] = 1;
      rowOrange[1] = "Апельсин";
      rowOrange[2] = "Всплывающая подсказка для апельсина";
      dt.Rows.Add(rowOrange);

      DataRow rowApple = dt.NewRow();
      rowApple[0] = 2;
      rowApple[1] = "Яблоко";
      rowApple[2] = "Всплывающая подсказка для яблока";
      dt.Rows.Add(rowApple);

      DataRow rowBanana = dt.NewRow();
      rowBanana[0] = 3;
      rowBanana[1] = "Банан";
      rowBanana[2] = "Всплывающая подсказка для банана";
      dt.Rows.Add(rowBanana);

      return dt;
   }
}

  ToolTipToCheckBoxList (58,7 KiB, 1 087 закачек)

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Google Buzz
Опубликовать в Одноклассники
Опубликовать в Яндекс
Опубликовать в Мой Мир

Похожие статьи

Оставить комментарий