Как отобразить иерархию управления формой в C#
В этом примере отображается иерархия элементов управления для формы. Это на самом деле относительно просто.
Некоторые элементы управления могут содержать другие элементы управления. Например, форма является элементом управления и содержит все элементы приложения Windows Forms. Аналогично Panel, TableLayoutPanel, SplitContainer, а другие элементы управления могут содержать дочерние элементы управления для формирования иерархии управления.
Эта программа включает в себя набор элементов управления, содержащих друг друга. Когда вы нажимаете кнопку в верхнем левом углу, выполняется следующий код.
// Показывать иерархию управления формой в элементе управления TreeView. private void btnShowHierarchy_Click(object sender, EventArgs e) { // Создаем корневой узел. HierarchyForm dlg = new HierarchyForm(); TreeView trv = dlg.trvHierarchy; TreeNode root = trv.Nodes.Add(ControlName(this)); // Построим остальную иерархию. BuildHierarchy(root, this); trv.ExpandAll(); // Отображение иерархии. dlg.ShowDialog(); }
Этот код создает новый HierarchyForm. Это форма, которую я добавил в проект, чтобы отобразить иерархию управления формой. (Я решил, что было бы слишком запутанно пытаться отобразить иерархию управления формы в самой форме.)
HierarchyForm содержит только элемент управления TreeView. Обратите внимание, что я установил свойство Modifiers этого элемента управления в Public во время разработки. Это позволяет коду основной формы обращаться к элементу управления TreeView.
После создания элемента управления HierarchyForm код получает ссылку на этот элемент управления TreeView. Он добавляет корневой узел, содержащий имя формы. Для этого используется метод ControlName, описанный в ближайшее время, чтобы получить имя формы.
Затем код вызывает метод BuildHierarchy (также описанный в скором времени) для создания остальной части дерева, отображающей иерархию элементов управления. Этот код заканчивается путем расширения всех узлов управления TreeView и отображения HierarchyForm.
В следующем коде показан метод BuildHierarchy.
// Показывать иерархию элемента управления ctl. private void BuildHierarchy(TreeNode parent_node, Control parent) { foreach (Control child in parent.Controls) { TreeNode child_node = parent_node.Nodes.Add(ControlName(child)); BuildHierarchy(child_node, child); } }
Этот метод принимает в качестве параметров узел в TreeView и родительский элемент управления. (При первом вызове этого метода родительский элемент управления является формой.)
Код проходит через дочерние элементы управления, которые содержатся родителем. Для каждого дочернего элемента (если есть дети) метод добавляет новый узел в родительский узел TreeView. он затем рекурсивно вызывает метод BuildHierarchy, чтобы добавить дочерние элементы дочернего элемента в дерево.
Последней частью программы является следующий ControlName метод.
// Вернуть имя и тип элемента управления. private string ControlName(Control ctl) { return ctl.Name + " [" + ctl.GetType().Name + "]"; }
Этот метод просто возвращает имя элемента управления, а затем его тип в квадратных скобках.