(源码)WinForm TextBox 实现自动索引功能

有时候在项目里面需要用到类似于百度那种自动索引的功能,在WinForm里面我采用的是用一个TextBox和一个ListBox结合来实现的,大致效果如下图所示:

 

详细的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AutoComplete
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataTable dt = new DataTable();
        private void Form1_Load(object sender, EventArgs e)
        {
            BindDataList();
        }

        private void NewMethod(string CodeName)
        {
            DataTable dt_New = new DataTable();
            dt_New = dt.Clone();
            try
            {
                //克隆一张Table对其进行筛选,条件则是用户输入的字符串,模糊查询。
                DataRow[] dr = dt.Select("TCode like '%" + CodeName + "%'");
                for (int i = 0; i < dr.Length; i++)
                {
                    dt_New.ImportRow((DataRow)dr[i]);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error!  " + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (dt_New.Rows.Count > 0)
            {
                //如果数据为空则不显示ListBox
                this.lsbCode1.Visible = true;
                this.lsbCode1.Items.Clear();
                for (int i = 0; i < dt_New.Rows.Count; i++)
                {
                    //有时候字符长度不一致导致布局很难看,这里统一增加一些空格,看上去整齐一点。
                    this.lsbCode1.Items.Add(dt_New.Rows[i][0].ToString().Trim().PadRight(10) + dt_New.Rows[i][1].ToString());
                }
            }
            else
            {
                this.lsbCode1.Visible = false;
            }

        }

        /// <summary>
        /// 测试数据,实际应用中可以指定数据库里面的数据。
        /// </summary>
        void BindDataList()
        {
            dt.Columns.Add("TCode");
            dt.Columns.Add("Description");

            dt.Rows.Add("AL01", "SAP Alert Monitor SAP报警监视器");
            dt.Rows.Add("AL02", "Database alert monitor 数据库警报监测器");
            dt.Rows.Add("AL03", "Operating system alert monitor 操作系统警告监视器");
            dt.Rows.Add("AL04", "Monitor call distribution 监视呼叫分配");
            dt.Rows.Add("AL05", "Monitor current workload 监视当前的工作负荷");
            dt.Rows.Add("CO03", "显示生产订单");
            dt.Rows.Add("C005N", "Collective Release");
            dt.Rows.Add("CO11N", "Time Ticket");
            dt.Rows.Add("CO12", "Confirmation - Collective");
            dt.Rows.Add("CO13", "Confirmation - Cancel");
            dt.Rows.Add("COOIS", "Production order information system");
            dt.Rows.Add("SE01", "Transport Organizer 传送组织者");
            dt.Rows.Add("SE03", "Workbench Organizer: Tools 工作台组织器:工具");
            dt.Rows.Add("SE06", "Set Up Workbench Organizer 设置工作台组织器");
            dt.Rows.Add("SE07", "Transport System Status Display 传输系统状态显示");
            dt.Rows.Add("SE09", "Workbench Organizer 工作平台组织者");
            dt.Rows.Add("SE10", "Customizing Organizer 自定义组织者");
            dt.Rows.Add("SE11", "数据库浏览");
            dt.Rows.Add("SE16", "Data Browser: Initial Screen");
            dt.Rows.Add("SE16N", "Table Browser (the N stands for New, it replaces SE16)");
            dt.Rows.Add("SE17", "General Table Display 通用表显示");
            dt.Rows.Add("MM01", "Create Material 创建物料信息");
            dt.Rows.Add("MM02", "Modify Material 修改物料信息");
            dt.Rows.Add("MM03", "Display Material 显示物料信息");
            dt.Rows.Add("ME11", "创建采购信息记录");
            dt.Rows.Add("ME01", "维护货源清单");
            dt.Rows.Add("ME51N", "创建采购申请");
            dt.Rows.Add("ME5A", "显示采购申请清单");

        }

        private void txtCode_TextChanged(object sender, EventArgs e)
        {
            this.lsbCode1.Visible = false;
            if (txtCode.Text == "")
            {
                //如果条件为空则清空已有数据,并隐藏ListBox
                this.lsbCode1.Items.Clear();
                this.lsbCode1.Visible = false;
            }
            else
            {
                //条件不为空则执行筛选数据的函数。
                NewMethod(this.txtCode.Text.Trim());
            }
        }
    }
}

例子源码

时间: 2024-09-30 14:29:57

(源码)WinForm TextBox 实现自动索引功能的相关文章

spring cloud eureka部分源码分析及微服务管理功能

eureka原生的管理页面只有查看服务节点和一些信息,没有动态启用停用服务节点的功能 一. EurekaClient获取所有注册的服务 eureka客户端会加载一个定时任务去获取注册中心的服务,任务的配置在:com.netflix.discovery.DiscoveryClient,刷新的线程是:CacheRefreshThread.获取的注册中心服务的时候,会把所有服务都拉取下来,但是默认会过滤掉状态不是UP的服务.获取服务的具体代码在:DiscoveryClient.getAndStoreF

java源码-图书管理系统及其全面的功能

问题描述 图书管理系统及其全面的功能 java编写的图书管理系统 谢谢 java编写的图书管理系统 谢谢 java编写的图书管理系统 谢谢 解决方案 http://download.csdn.net/detail/songatie/3350887 如果没有积分,采纳了可以帮你下载. 解决方案二: 图书管理系统功能图书管理系统功能设计图书管理系统

[MySQL 源码] innodb如何创建二级索引

以下为分析问题时的随笔.写的很凌乱,仅做记录,以备后用...... ////////////////////////////////////////////////////////////// ha_innobase::add_index是innodb创建索引的接口函数. 以下所有的讨论都是基于创建一个非聚集的二级索引.因此一些过程是被省略掉了. 1.获取数据词典信息           indexed_table = dict_table_get(prebuilt->table->name,

想要下载Android v2.x 的demo源码,但是在下载页面下载出来的貌似是v3的源码啊。想做红包功能,v3的能行么?请问大家怎么破~

问题描述 需要做红包功能,但貌似要自己集成,有哪位亲做过红包吗?跪求教,感谢 解决方案 下载那里可以切换到2.x的版本的,目前只提供了2.x的红包集成解决方案二:从环信2.2.9版开始,已经默认集成了红包功能,无需自己手动集成了.

.NET开发邮件发送功能的全面教程(含邮件组件源码)

原文 http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html    今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         邮件发送相关.NET类库 3)         介绍我开发的一个发送邮件的小组件(MailHelper) 4)         MailHelper

A5源码:2014年3月优秀源码更新推荐

中介交易 SEO诊断 淘宝客 云主机 技术大厅 A5源码,为用户提供海量免费网站源码下载!3月份又有大量的优秀源码在功能方面或性能方面进行更新优化,同以往相同,本月依然为您整理了部分源码具体的更新详情.希望对于想要学习做网站的朋友或者正在使用的用户有所帮助. 在线编辑器 162100editor(html编辑器)是一个迷你HTML编辑器,只一个JS文件搞定.其特点是:代码简洁.短小精悍,使用起来非常方便. 162100editor(html编辑器)本次更新,增加了上传遮罩,用于较大文件上传时的等

MySQL · 引擎介绍 · Sphinx源码剖析(一)

介绍 Sphinx是一个全文索引引擎,他被设计为可以非常简单方便的与各种数据库(mysql,PG-)进行交互.它提供了两种读取接口,a) sphinx自己实现的mysql协议的接口, SphinxQL.b) 各种语言客户端的接口,也就是native搜索API. c) 也可以直接通过mysql server的一个存储引擎插件来访问, SphinxSE. 接下来我们会有一些列文章来分析Sphinx的设计以及源码实现. 本篇是第一篇,主要是简要的介绍Sphinx的源码结构,设计以及索引文件的构成.我们

开发一个Linux调试器(五):源码和信号

在上一部分我们学习了关于 DWARF 的信息,以及它如何被用于读取变量和将被执行的机器码与我们的高级语言的源码联系起来.在这一部分,我们将进入实践,实现一些我们调试器后面会使用的 DWARF 原语.我们也会利用这个机会,使我们的调试器可以在命中一个断点时打印出当前的源码上下文. 系列文章索引 随着后面文章的发布,这些链接会逐渐生效. 准备环境 断点 寄存器和内存 Elves 和 dwarves 源码和信号 源码级逐步执行 源码级断点 调用栈展开 读取变量 下一步 设置我们的 DWARF 解析器

2013年10月知名源码系统更新提示

中介交易 SEO诊断 淘宝客 云主机 技术大厅 建立并维护好一个网站的关键,并非仅仅是选择一套优秀的系统,而且要关注系统官方动态,及时升级,修复漏洞,减少不必要的损失!2013年10月又有部分系统做了重要的更改,A5源码小编汇总于此,希望对正在使用的站长朋友有所提醒! 论坛社区 Discuz! 是康盛公司(Comsenz)推出的一个以社区为基础的专业建站平台,已为超过100个行业的150多万网站提供社区动力,可根据行业特点,提供以Discuz! 为核心的互联网社区解决方案. Discuz! X3