Однажды, в процессе работы у меня возника ситуация, когда необходимо было для позиций 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;
}
}
[download id=”1″]


