Отображение подсказок для узлов 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.