此函数仅查找树视图中的第一个节点,其中包含SearchText.
private TreeNode SearchNode(string SearchText,TreeNode StartNode)
{
TreeNode node=null;
while (StartNode!= null)
{
if (StartNode.Text.ToLower().Contains(SearchText.ToLower()))
{
node = StartNode;
break;
};
if (StartNode.Nodes.Count != 0)
{
node=SearchNode(SearchText, StartNode.Nodes[0]);//Recursive Search
if (node != null)
{
break;
};
};
StartNode = StartNode.NextNode;
};
return node;
}
private void button1_Click(object sender, EventArgs e)
{
string SearchText = this.textBox1.Text;
if (SearchText == "")
{
return;
};
TreeNode SelectedNode = SearchNode(SearchText, treeView1.Nodes[0]);
if (SelectedNode != null)
{
this.treeView1.SelectedNode = SelectedNode;
this.treeView1.SelectedNode.Expand();
this.treeView1.Select();
};
}
Run Code Online (Sandbox Code Playgroud)
我应该如何更改它,因此该函数不仅能够找到第一个节点,而且还能找到所有这些节点,每次单击button1时,它都会找到下一个节点直到结束,然后从头开始.所以我不应该从TreeView1.Nodes [0]搜索,而是从TreeView1.SelectedNode搜索...
das*_*ash 14
如下所示应该可以添加到您的表单代码中.
private List<TreeNode> CurrentNodeMatches = new List<TreeNode>();
private int LastNodeIndex = 0;
private string LastSearchText;
private void button1_Click(object sender, EventArgs e)
{
string searchText = this.textBox1.Text;
if (String.IsNullOrEmpty(searchText))
{
return;
};
if (LastSearchText != searchText)
{
//It's a new Search
CurrentNodeMatches.Clear();
LastSearchText = searchText;
LastNodeIndex = 0;
SearchNodes(searchText, treeView1.Nodes[0]);
}
if (LastNodeIndex >= 0 && CurrentNodeMatches.Count > 0 && LastNodeIndex < CurrentNodeMatches.Count)
{
TreeNode selectedNode = CurrentNodeMatches[LastNodeIndex];
LastNodeIndex++;
this.treeView1.SelectedNode = selectedNode;
this.treeView1.SelectedNode.Expand();
this.treeView1.Select();
}
}
private void SearchNodes(string SearchText, TreeNode StartNode)
{
TreeNode node = null;
while (StartNode != null)
{
if (StartNode.Text.ToLower().Contains(SearchText.ToLower()))
{
CurrentNodeMatches.Add(StartNode);
};
if (StartNode.Nodes.Count != 0)
{
SearchNodes(SearchText, StartNode.Nodes[0]);//Recursive Search
};
StartNode = StartNode.NextNode;
};
}
Run Code Online (Sandbox Code Playgroud)
这有两个部分;
将所有节点收集到一个 List<TreeNode>
List<TreeNode>如果搜索没有改变,则通过页面.如果搜索已更改,请清除列表并重置索引.
我已经使用在.Net 4下运行的Windows Forms测试了它 - 它通过TreeView中的每个节点分页,其中包含搜索文本,1到1,直到它到达最后一个节点.
| 归档时间: |
|
| 查看次数: |
22732 次 |
| 最近记录: |