露雨城市-南京.NET爱好者
主要讨论的为C#,ASP.NET,Sql Server2005,包括VSTS 2005的相关工具和功能。
前面我写过“露雨资源库”的第一篇和第二篇,分别介绍了界面设计和设计思路。
链接如下:
露雨资源库(第一个.net2.0软件)一 http://luyu.cnblogs.com/archive/2005/11/25/284281.html
露雨资源库(第一个.net2.0软件)二 http://luyu.cnblogs.com/archive/2005/12/02/289178.html

这一篇主要讲为控件增加自动完成功能的具体实现过程,和大家一起分享,如果觉得我写的有不妥的地方,请给我留言或发MAIL给我,谢谢。

我们知道.net2.0为很多控件增加了自动完成的功能,具体自动完成的信息,我引用MSDN中的说明,请看。
-----------------------------------
如果您曾经用过 Internet Explorer,就会看过自动完成的操作过程。自动完成是指以下行为:当向一个文本控件中输入数据时,系统会自动建议它认为您可能会输入的内容。该功能通常在用户需要输入很长或很复杂的字符串时最为有用。要让自动完成解决方案起作用,一个先决条件是存在一些数据集,系统可以使用这些数据集来查找可能的匹配项。

现在,可以很容易地向 Windows 窗体应用程序的文本框和组合框中添加自动完成支持。这两个控件都有三个新属性:AutoCompleteMode、AutoCompleteSource 和 AutoCompleteCustomSource。可以通过将 AutoCompleteMode设置为 AppendSuggest 或 SuggestAppend 来启用自动完成。将 AutoCompleteMode设置为 Append 可使最可能的匹配项自动追加到当前数据。如果设置为 Suggest,则会产生由一个或多个建议完成字符串组成的下拉列表。SuggestAppend同时执行这两项任务。该控件还需要一个源列表,这样它就可以在用户输入数据时从中搜索建议。AutoCompleteSource属性允许您从一些系统源中进行选择,例如 FileSystem、HistoryList、RecentlyUsedList、AllUrl 和 CustomSource。

如果选择 CustomSource,则必须向 AutoCompleteCustomSource属性提供一个字符串列表。这可以在设计时或运行时完成。自定义源非常强大,因为它们允许您为业务数据提供自动完成行为。例如,当窗体加载并提供类别名称列表以用作组合框的显示源和自动完成源时,可以从数据库中查询产品类别的列表。该方法允许用户快速选择一个类别,而无需输入完整的类别名称或者手动导航很长的项列表。

-----------------------------------
很多朋友说,选择了自动完成后,关闭程序,再次打开还是会消失,只在程序执行时会有。在这里我要告诉大家,不仅要选择AutoCompleteCustomSource属性,还需要写代码,或选择项目的属性设置才可以。
下面我把一些过程详细的和大家说一下。
1.选择AutoCompleteMode为Suggest,选择AutoCompleteSource为AutoCompleteCustomSource.

2.配置项目的属性设置,自定义自己的键名,我定义的为"HistoryKey"

3.填写一些简单的代码就可以了。
private void toolStripButton3_Click(object sender, EventArgs e)
        
{
            
if (CanHistoryKey == true)              //让用户自己设置是否愿意使用自动完成的功能
            {
                AutoCompleteStringCollection auto 
= new AutoCompleteStringCollection();//定义并实例化AutoCompleteStringCollection类
                if (MyLib.Properties.Settings.Default.HistoryKey != null)
                    auto 
= MyLib.Properties.Settings.Default.HistoryKey;//设置时HistoryKey的值是为null的,所以不为空时我们需要加载旧的历史关键字
                auto.Add(toolStripTextBox1.Text.Trim());                //添加新的历史关键字
                MyLib.Properties.Settings.Default.HistoryKey = auto;    //将历史关键字进行更新(不过并没有保存)
                toolStripTextBox1.AutoCompleteCustomSource = auto;   //立刻为控件添加新的历史关键字
            }

        }

在Form1_Load中加入
toolStripTextBox1.AutoCompleteCustomSource = MyLib.Properties.Settings.Default.HistoryKey;  

最重要的是要在关闭窗口前保存这些记录,要不然你关闭程序后,下次再执行时还是没有以前的记录了。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        
{
            MyLib.Properties.Settings.Default.Save(); 
        }

最后还要有一个清除的功能
private void 清空历史记录ToolStripMenuItem_Click(object sender, EventArgs e)
        
{
            MyLib.Properties.Settings.Default.HistoryKey 
= null;
            toolStripTextBox1.AutoCompleteCustomSource 
= null;
        }

(我发现清除时,直接使用MyLib.Properties.Settings.Default.HistoryKey = null;就可以了,而且不用使用MyLib.Properties.Settings.Default.HistoryKey.Save();也可以。)

好啦,最后看看效果吧,很不错的哦。至此我们为露雨资源库又添加了一个贴心的小功能。 :)

posted on 2005-12-06 11:05  露雨城市.NET2.0和Sql Server 2005开发研究  阅读(2360)  评论(7编辑  收藏  举报