public int IndexOf(TreeNode treeNode)
        {
            if (!IsNodeInView(treeNode))
            {
                return(-1);
            }
            int index = 0;

            if (treeNode.ParentNode == null)
            {
                var rootNodes     = RootNodes.Where(r => !r.IsFiltered).ToList();
                var rootNodeIndex = rootNodes.IndexOf(treeNode);
                if (rootNodeIndex == -1)
                {
                    return(-1);
                }
                for (int i = 0; i < rootNodeIndex; i++)
                {
                    index += rootNodes[i].GetYAmountCache();
                }
                return(index);
            }
            else
            {
                var childNodes = treeNode.ParentNode.ChildNodes.Where(r => !r.IsFiltered).ToList();
                var childIndex = childNodes.IndexOf(treeNode);
                index += childIndex + 1;
                if (childIndex != 0)
                {
                    for (int i = 0; i < childIndex; i++)
                    {
                        index += childNodes[i].GetYAmountCache() - 1;
                    }
                }
            }
            return(index + IndexOf(treeNode.ParentNode));
        }