Я пытаюсь выполнить поиск TreeView для определенной строки, как только я нашел индекс узла, я хочу вернуть его индекс и изменить задний цвет этого конкретного узла, однако мой текущий код, кажется, не будет возвращаться любые матчи, если это не корневой узел:Поиск древовидной структуры для определенной строки
private void ApplyRulesetColors()
{
foreach (var rule in dictOverwriteEntries)
{
int iResultIndex = SearchTreeView(rule.Key, tvDirectoryStructure.Nodes);
if (iResultIndex > -1)
{
switch (rule.Value)
{
case Operations.Overwrite:
tvDirectoryStructure.Nodes[iResultIndex].BackColor = Color.Red;
break;
case Operations.Delete:
break;
case Operations.None:
break;
default:
break;
}
}
}
}
Это функция, которая должна быть поиск в TreeView:
private int SearchTreeView(string p_sSearchTerm, TreeNodeCollection p_Nodes)
{
foreach (TreeNode node in p_Nodes)
{
if (node.Text == p_sSearchTerm)
{
return node.Index;
}
if (node.Nodes.Count > 0)
SearchTreeView(p_sSearchTerm, node.Nodes);
}
return -1;
}
в тот момент, когда будет только когда-либо сопоставить значение корневого узла и вернуть 0, хотя (насколько я могу судить) он должен искать по всему дереву, включая дочерние узлы.
спасибо.
Wouldnt вы хотите "вернуть SearchTreeView (p_sSearchTerm, node.Nodes);" ? в противном случае он ест возвращаемое значение – BugFinder
Вы можете использовать ['Найти'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.treenodecollection.find (v = vs.110) .aspx) метода 'TreeView' для поиска узлов на основе их свойства' Name'. Кроме того, если вы хотите выполнить более сложный поиск, вы можете использовать метод расширения '' Descendants' '(http://stackoverflow.com/a/32360956/3110834). Вы можете увидеть пример обоих методов [здесь] (http://stackoverflow.com/a/34228733/3110834). –