/// <summary> /// Returns last rendered node on screen. /// </summary> /// <param name="tree">Tree control.</param> /// <returns>Last rendered node or null</returns> public static Node GetLastDisplayedNode(AdvTree tree) { Rectangle r = tree.NodeLayout.ClientArea; Node node = tree.SelectedNode; if (node == null) node = GetFirstVisibleNode(tree); Point scrollPos = Point.Empty; if (tree.AutoScroll) scrollPos = tree.GetAutoScrollPositionOffset(); // Find last fully rendered node Node lastNode = null; if (r.IntersectsWith(node.Bounds)) lastNode = node; while (node != null) { node = NodeOperations.GetNextVisibleNode(node); if (node != null && node.Selectable) { Rectangle nodeRect = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds, node, scrollPos); if (nodeRect.Bottom > r.Bottom) break; else if (r.IntersectsWith(nodeRect)) lastNode = node; } } return lastNode; }
/// <summary> /// Returns first rendered node on screen. /// </summary> /// <param name="tree">Tree control.</param> /// <returns>Last rendered node or null</returns> public static Node GetFirstDisplayedNode(AdvTree tree) { Rectangle r = tree.GetInnerRectangle(); r.Y += tree.ColumnHeaderHeight; r.Height -= tree.ColumnHeaderHeight; Node node = tree.SelectedNode; if (node == null) node = GetFirstVisibleNode(tree); Point scrollPos = Point.Empty; if (tree.AutoScroll) scrollPos = tree.GetAutoScrollPositionOffset(); // Find last fully rendered node Node lastNode = null; if (r.IntersectsWith(node.Bounds)) lastNode = node; while (node != null) { node = NodeOperations.GetPreviousVisibleNode(node); if (node != null && node.Selectable) { Rectangle nodeRect = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds, node, scrollPos); if (r.IntersectsWith(nodeRect)) lastNode = node; else if (nodeRect.Y < r.Y) break; } } return lastNode; }