winform实现类似google的搜索提示Suggest Search

由于最近项目需要用到类似google的搜索提示,在网上找了一些资料,现将具体实现方法记录:

主要使用的是textbox的AutoCompleteMode属性。

注意:AutoCompleteMode有Append,None,Suggest,SuggestAppend四种属性:
Append就是把第一个相似的项追加到你输入字符的后面
None就是不做任何提示
Suggest就是把相似的项用列表的方法显示在下面
SuggestAppend就是把第一个相似的项加到你输入字符的后面并在下面用列表显示所有相似的项

AutoCompleteCustomSource属性的使用是可选的,但必须将 AutoCompleteSource 属性设置为CustomSource后才能使用AutoCompleteCustomSource.
AutoCompleteMode 和 AutoCompleteSource 属性必须一起使用。

首先在窗体中有两个控件:

textbox用于搜索;treeview用于存放需要搜索的数据源。

定义变量List<string> lstNodes = new List<string>();用于存放树节点内容

定义变量TreeNode preNode;用于存放树的前一节点

在form_load事件里添加下面的代码:

1 GetTreeViewNode(treeView1.Nodes);//遍历树的所有节点
2             tbsearch.AutoCompleteCustomSource.AddRange(lstNodes.ToArray());
3             tbsearch.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
4             tbsearch.AutoCompleteSource = AutoCompleteSource.CustomSource;
遍历树的所有节点方法:
1  void GetTreeViewNode(TreeNodeCollection node)
2         {
3             foreach (TreeNode TNode in node)
4             {
5                 lstNodes.Add(TNode.Text);
6                 GetTreeViewNode(TNode.Nodes);
7             }  
8         }

定位树节点方法:

 1  void LocateTreeViewNode(TreeNodeCollection node,string nodeText)
 2         {
 3             foreach (TreeNode TNode in node)
 4             {
 5                 if (TNode.Text == nodeText)
 6                 {
 7                     if (preNode != null)
 8                     {
 9                         preNode.BackColor = Color.Transparent;
10                         preNode.ForeColor = Color.Black;
11                     }
12                     TNode.BackColor = Color.Blue;
13                     TNode.ForeColor = Color.White;
14                     tvSource.SelectedNode = TNode;
15                     preNode = TNode;
16                     return;
17                 }
18                 LocateTreeViewNode(TNode.Nodes,nodeText);
19             }  
20         }

在textbox的KeyUp事件里面调用定义树节点方法。至此大功告成。

结果如截图:

  

posted @ 2012-08-31 21:52  iskyoole  阅读(1015)  评论(0编辑  收藏  举报