Вы могли, вероятно, обнаружить неактивность на своей веб-странице с помощью перечисленных приемов mousemove, но это не скажет Вам, что пользователь не находится на другой странице в другом окне или вкладке, или что пользователь находится в Word или Photoshop или WOW и просто не смотрит на Вашу страницу в это время. Обычно я просто делал бы упреждающую выборку и полагался бы на многозадачность клиента. Если Вы действительно потребность эта функциональность, Вы делаете что-то с элементом управления ActiveX в окнах, но это ужасно в лучшем случае
Не используйте вложенные циклы, а используйте рекурсивное решение, например:
void ListNodes( TreeNode node )
{
foreach( var subnode in node.Nodes )
{
ListNodes( subnode );
}
// Print out node
}
Вызовите эту функцию для корневого узла.
Для дополнительного вопроса: проверьте FullPath
собственность.
Вы можете использовать рекурсивную функцию для обхода всего дерева:
private void Traverse(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
Console.WriteLine("{0} -> {1}", node.Name, node.FullPath);
Traverse(node.Nodes);
}
}
Затем вы можете вызвать это, используя:
Traverse(treeView.Nodes);
, и он сначала пройдет всю глубину дерева (то есть спустившись как можно глубже, прежде чем перейти к следующий брат). Передача коллекции узлов
означает, что этот код будет работать с деревьями, имеющими несколько корневых узлов.
В приведенном выше примере кода будет распечатано имя узла, а также полный путь этого узла в дереве.
Я не большой поклонник рекурсии, но, похоже, вы должны ее использовать. Я видел умный пример онлайн-рекурсии смешивания с итератором.
private int GetLevels(TreeNodeCollection treeNodes)
{
int level = 0;
foreach (TreeNode node in TreeTopDown(treeNodes))
{
int i = node.Level;
if (i > level) level = i;
}
return level;
}
//TopDown Iterator
private IEnumerable<TreeNode> TreeTopDown(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
yield return node;
foreach (TreeNode subNode in TreeTopDown(node.Nodes)) yield return subNode;
}
}
//BottomUp Iterator
private IEnumerable<TreeNode> TreeBottomUp(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
foreach (TreeNode subNode in TreeBottomUp(node.Nodes)) yield return subNode;
yield return node;
}
}