Hi Tobias,
Here is an example implementation of the required functionality:
First cache the original nodes so when the filter is empty to set back the NTreeViewEx nodes with them:
NTreeNodeCollection m_CachedNodes;
...
//Cache the initial nodes of NTreeViewEx
m_CachedNodes = new NTreeNodeCollection();
for (int i = 0; i < nTreeViewEx1.Nodes.Count; i++)
{
NTreeNode node = nTreeViewEx1.Nodes[i];
node.CloneChildren = true;
m_CachedNodes.Add((NTreeNode)node.Clone());
}
Use the following code when the text of the filter is changed:
string text = nTextBox1.Text;
NTreeNodeTextFilter filter = new NTreeNodeTextFilter();
filter.CaseSensitive = false;
filter.Options = CommonStringOptions.Contains;
filter.Text = text;
if (string.IsNullOrEmpty(text))
{
//When the filter is empty set the NTreeViewEx with the original nodes.
nTreeViewEx1.Nodes.Clear();
nTreeViewEx1.VisibleFilter = null;
for (int i = 0; i < m_CachedNodes.Count; i++)
{
NTreeNode node = m_CachedNodes[i];
nTreeViewEx1.Nodes.Add(node);
}
}
else
{
//Apply the filter on NTreeViewEx control, and set the nodes which are not
//hidden from the filter to its Nodes collection.
nTreeViewEx1.Nodes.Clear();
nTreeViewEx1.VisibleFilter = filter;
List<NTreeNode> nodes = GetVisibleNodes(m_CachedNodes);
for (int i = 0; i < nodes.Count; i++)
{
NTreeNode node = nodes[i];
node.CloneChildren = false;
nTreeViewEx1.Nodes.Add((NTreeNode)node.Clone());
}
}
...
private List<NTreeNode> GetVisibleNodes(NTreeNodeCollection nodes)
{
List<NTreeNode> result = new List<NTreeNode>();
for (int i = 0; i < nodes.Count; i++)
{
NTreeNode node = nodes[i];
if (!node.IsHiddenByFilter)
{
result.Add(node);
}
NTreeNodeCollection subNodes = node.Nodes as NTreeNodeCollection;
if (subNodes != null)
{
result.AddRange(GetVisibleNodes(subNodes));
}
}
return result;
}
This way you will have all nodes that are not filtered as a list in NTreeViewEx control.
In the next release we will modify the NTreeNodeStringFilter so it should be able to filter nodes in more advance way.
I hope this helps.