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


     什么是猜想输入


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

     

          如上图所示,使用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即可。

     

      


          

          源码下载

    【转自】http://www.cnblogs.com/zhaoblogs/archive/2011/12/07/2278938.html

  • 相关阅读:
    动态内存开辟(一)
    结构体,联合体,枚举,typedef
    练习使用C++的string类
    WIN10 + Qt 5.14(MSVC 2017,32bit) + APP项目(minGW-7.3.0 32bit)+glog
    扫雷游戏
    最小栈实现
    快速排序算法
    c++语句(循环)
    C++ 存储类
    C++ 运算符
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594678.html
Copyright © 2020-2023  润新知