public void EnsureVisible() { if (null == treeView) { return; } TreeView.NodeEnumerator nodes; int nodeFromTop; int nodeNo; while (true) { // Find "this" node number and position from the top control. nodeFromTop = -1; nodeNo = 0; bool nodeFound = false; nodes = new TreeView.NodeEnumerator(treeView.nodes); while (nodes.MoveNext()) { if (nodes.currentNode == treeView.topNode) { // We are at the top of the control. nodeFromTop = 0; } if (nodes.currentNode == this) { if (nodeFromTop < 0) { treeView.topNode = this; treeView.Invalidate(); return; } nodeFound = true; break; } if (nodeFromTop >= 0) { nodeFromTop++; } nodeNo++; } if (nodeFound) { break; } else { // Make sure all parents are expanded and see if its now visible. TreeNode node = this; TreeNode highestNode = node; for (; node != null; node = node.Parent) { node.expanded = true; highestNode = node; } treeView.InvalidateDown(highestNode); } } int visibleNodes = treeView.VisibleCountActual; // See if its already visible. if (nodeFromTop < visibleNodes) { return; } // Set the top node no we want to make this node 1 up from the bottom. nodeFromTop = nodeNo - visibleNodes + 1; if (nodeFromTop < 0) { nodeFromTop = 0; } // Find the node corresponding to this node no. nodes.Reset(); nodeNo = 0; while (nodes.MoveNext()) { if (nodeFromTop == nodeNo) { treeView.topNode = nodes.currentNode; treeView.Invalidate(); break; } nodeNo++; } }
public void EnsureVisible() { if( null == treeView ) return; TreeView.NodeEnumerator nodes; int nodeFromTop; int nodeNo; while (true) { // Find "this" node number and position from the top control. nodeFromTop = -1; nodeNo = 0; bool nodeFound = false; nodes = new TreeView.NodeEnumerator(treeView.nodes); while (nodes.MoveNext()) { if (nodes.currentNode == treeView.topNode) { // We are at the top of the control. nodeFromTop = 0; } if (nodes.currentNode == this) { if (nodeFromTop < 0) { treeView.topNode = this; treeView.Invalidate(); return; } nodeFound = true; break; } if (nodeFromTop >= 0) { nodeFromTop++; } nodeNo++; } if (nodeFound) { break; } else { // Make sure all parents are expanded and see if its now visible. TreeNode node = this; TreeNode highestNode = node; for (; node != null; node = node.Parent) { node.expanded = true; highestNode = node; } treeView.InvalidateDown(highestNode); } } int visibleNodes = treeView.VisibleCountActual; // See if its already visible. if (nodeFromTop < visibleNodes) { return; } // Set the top node no we want to make this node 1 up from the bottom. nodeFromTop = nodeNo - visibleNodes + 1; if (nodeFromTop < 0) { nodeFromTop = 0; } // Find the node corresponding to this node no. nodes.Reset(); nodeNo = 0; while (nodes.MoveNext()) { if (nodeFromTop == nodeNo) { treeView.topNode = nodes.currentNode; treeView.Invalidate(); break; } nodeNo++; } }