Отображение подсказок для узлов TreeView в C#
Во время разработки я добавил элемент формы TreeView в форму. Я также добавил связанный элемент управления ImageList для хранения изображений для узлов управления TreeView, и я установил элемент управления TreeView ImageList tt > в элемент управления ImageList. Наконец, я добавил компонент ToolTip в форму и назвал его ttOrg.
При запуске программы он создает три типа узлов TreeView, представляющих фабрики, группы и лица. Он создает связанный объект для каждого узла и присваивает его свойству Tag узла, чтобы предоставить дополнительную информацию об объектах, которые они представляют.
В этом примере классы объектов FactoryData, GroupData и PersonData действительно просто содержат имена, отображаемые во всплывающих подсказках, но в реальном вы могли бы дать им более интересную информацию и методы.
Следующий код показывает, как программа создает новый заводский узел.
factory = AddTreeViewNode(trvOrg.Nodes,
"R & D", imFactory,
new FactoryData("Factory: R & D"));
Здесь параметры метода AddTreeViewNode представляют собой:
Следующий код показывает метод AddTreeViewNode, который вызывает предыдущий код.
// Добавить новый узел в коллекцию.
private TreeNode AddTreeViewNode(TreeNodeCollection parent_nodes,
string text, int image_index, object tag_object)
{
TreeNode new_node = parent_nodes.Add(text);
new_node.ImageIndex = image_index;
new_node.SelectedImageIndex = image_index;
new_node.Tag = tag_object;
return new_node;
}
Метод добавляет новый TreeNode в TreeNodeCollection, переданный в качестве первого параметра. Он устанавливает ImageIndex узла, чтобы указать, какое изображение ImageList должно отображаться для этого узла. Наконец, он устанавливает свойство узла Tag для связанного объекта.
В следующем коде показан простой класс FactoryData, используемый в этом примере.
public class FactoryData
{
public string Name = "";
// Инициализация конструктора.
public FactoryData(string new_name)
{
Name = new_name;
}
}
Пока программа запущена, в обработчике событий trvOrg_MouseMove элемента управления TreeView, показанном в следующем коде, отображаются всплывающие подсказки.
// Отобразите соответствующую подсказку.
private TreeNode old_node = null;
private void trvOrg_MouseMove(object sender, MouseEventArgs e)
{
// Найти узел под мышкой.
TreeNode node_here = trvOrg.GetNodeAt(e.X, e.Y);
if (node_here == old_node) return;
old_node = node_here;
// Посмотрим, есть ли у нас узел.
if (old_node == null)
{
ttOrg.SetToolTip(trvOrg, "");
}
else
{
// Получить данные объекта этого узла.
if (node_here.Tag is FactoryData)
{
FactoryData factory_data = node_here.Tag as FactoryData;
ttOrg.SetToolTip(trvOrg, factory_data.Name);
}
else if (node_here.Tag is GroupData)
{
GroupData group_data = node_here.Tag as GroupData;
ttOrg.SetToolTip(trvOrg, group_data.Name);
}
else if (node_here.Tag is PersonData)
{
PersonData person_data = node_here.Tag as PersonData;
ttOrg.SetToolTip(trvOrg, person_data.Name);
}
}
}
Этот обработчик событий использует метод GetNodeAt элемента управления TreeView, чтобы увидеть, какой узел находится под мышью. Если это то же самое, что и ранее найденный узел, обработчик события возвращается.
Если новый узел null, код устанавливает TreeView элемент управления ToolTip в пустую строку, чтобы удалить предыдущую всплывающую подсказку. р>
Если новый узел не является null, код проверяет тип узла и соответствующим образом устанавливает ToolTip.
