• C# WinForm 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即可。

      


          

          源码下载

  • 相关阅读:
    java代码中的三元表达式
    RequestDispatcher用法
    SQL的分页算法
    “将截断字符串或二进制数据”错误分析
    SQL Server 2005中top关键字的用法
    rtems开发环境
    linux虚拟机无法识别u盘
    多核性能优化
    windows无法安全卸载u盘的老毛病
    关闭指定servcie日志
  • 原文地址:https://www.cnblogs.com/zhaoblogs/p/2278938.html
Copyright © 2020-2023  润新知