C# WinForm TextBox猜想输入和历史记录输入

转自:https://www.cnblogs.com/zhaoblogs/archive/2011/12/07/2278938.html  

什么是猜想输入


   

      当我们在使用查询应用时,输入某个关键字后文本框下面就会自动弹出跟此关键字相附的词组供我们选择,为我们节省了输入的时间,这就是猜想输入,例如:百度,谷歌,等等,如下图:

 

 

      如上图所示,使用WinForm的TextBox实现了这样的效果,主要借助于TextBox的AutoCompleteMode和AutoCompleteSource以及AutoCompleteCustomSource属性。

 

  详细参数


 

      AutoCompleteMode  

      获取或设置控制自动完成如何作用于TextBox的选项。 

      属性值

      Append  将最可能的候选字符串的其余部分追加到现有的字符,并突出显示追加的字符。

      Suggest  显示与编辑控件关联的辅助下拉列表。 此下拉列表填充了一个或多个建议完成字符串。

      SuggestAppend  追加 Suggest 和 Append 选项。

      None  禁用自动完成 这是默认值。


      AutoCompleteSource  获取或设置一个值,该值指定用于自动完成的完整字符串的源。 

      AutoCompleteCustomSource  获取或设置在 AutoCompleteSource 属性设置为 CustomSource 时使用的自定义 System.Collections.Specialized.StringCollection


      如下图:

      

 

  代码设计


      

TextBoxRemind 

 

public  class  TextBoxRemind
{
     private  string [] array = null ;
     public  void  InitAutoCompleteCustomSource(TextBox textBox)
     {
         array = ReadTxt();
         if  (array != null  && array.Length > 0)
         {
             AutoCompleteStringCollection ACSC = new  AutoCompleteStringCollection();
 
             for  ( int  i = 0; i < array.Length; i++)
             {
                 ACSC.Add(array[i]);
             }
 
             textBox.AutoCompleteCustomSource = ACSC;
         }
     }
 
     string [] ReadTxt()
     {
         try
         {
             if  (!File.Exists( "Remind.txt" ))
             {
                 FileStream fs =
                     File.Create( "Remind.txt" );
                 fs.Close();
                 fs = null ;
             }
 
             return  File.ReadAllLines( "Remind.txt" , Encoding.Default);
         }
         catch
         {
             return  null ;
         }
     }
 
     public  void  Remind( string  str)
     {
         StreamWriter writer = null ;
         try
         {
             if  (array != null  && !array.Contains(str))
             {
                 writer = new  StreamWriter( "Remind.txt" , true , Encoding.Default);
                 writer.WriteLine(str);
             }
         }
         finally
         {
             if  (writer != null )
             {
                 writer.Close();
                 writer = null ;
             }
         }
     }
}

  

      历史记录

      由于存储的都是文本数据,所以采用了文本文档进行存储,轻量级操作方便,系统会自动创建Remind.txt文件。

      加载窗体时首先初始化InitAutoCompleteCustomSource,添加AutoCompleteStringCollection,当我们点击确认后重新初始化数据源,加载之前录入的关键字。 

public  partial  class  Form1 : Form
{
     private  TextBoxRemind remind = null ;
     public  Form1()
     {
         InitializeComponent();
         remind = new  TextBoxRemind();
         InitTextBoxRemind();
     }
 
     void  InitTextBoxRemind()
     {
         remind.InitAutoCompleteCustomSource(textBox1);
     }
 
     private  void  button1_Click( object  sender, EventArgs e)
     {
         if  (textBox1.Text.Trim() != "" )
         {
             remind.Remind(textBox1.Text.Trim());
             InitTextBoxRemind();
         }
     }
}

  

  最后


      

      大家经常遇到使用StreamReader和StreamWriter时中文不能正常显示,一个简单的方法就是将Encoding设置为Default即可。

 

猜你喜欢

转载自blog.csdn.net/menghuangxiao/article/details/80603817