Добавление всплывающих подсказок к 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 закачек)