因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下:

        List<string> listOnit = new List<string>(); //绑定原始数据源
List<string> listNew = new List<string>(); private void comboBox1_TextUpdate(object sender, EventArgs e)
{
this.comboBox1.Items.Clear();
listNew.Clear();
//在原始数据源中遍历,把包含当前输入的内容添加到listNew中
foreach (string item in listOnit)
{
if (item.Contains(this.comboBox1.Text))
{
listNew.Add(item);
}
}
this.comboBox1.Items.AddRange(listNew.ToArray());
this.comboBox1.SelectionStart = this.comboBox1.Text.Length;
Cursor = Cursors.Default;
this.comboBox1.DroppedDown = true;
}

这个代码可以实现模糊匹配,但是有个诡异的错误,就是当你输入某些内容先匹配到,但是最后却没有匹配项就会报错。打个比方,你想输入“张四”,数据源中有“张三”,你先输入“张”,然后出现所有带有“张”的匹配项,然后你在输入“四”,则没有了匹配项,则会出现报错,报错信息如下:

************** 异常文本 **************
System.ArgumentOutOfRangeException: InvalidArgument=“0”的值对于“index”无效。
参数名: index
在 System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)
在 System.Windows.Forms.ComboBox.get_Text()
在 System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
在 System.Windows.Forms.ComboBox.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

我在网上找,一直找不到原因,我也找不到这个问题具体错在什么地方。要吐槽的是这个Textupdate事件根本没办法调试,因为当你输入第一个字匹配之后,他就会默认选择第一项从而进入selectchange事件,也就没办法调试了,后来苦苦思索终于想到一个解决方法,虽然不知道原因,但终究还是解决了。就是当combobox没有匹配项的时候,就在它的下拉框添加空字符串,这样就能组织报错了,稍微改了一下代码就可以了。

        private void comboBox1_TextUpdate(object sender, EventArgs e)
{
this.comboBox1.Items.Clear();
listNew.Clear();
foreach (string item in listOnit)
{
if (item.Contains(this.comboBox1.Text))
{
listNew.Add(item);
}
}
if (listNew.Count != 0)
{
this.comboBox1.Items.AddRange(listNew.ToArray());
this.comboBox1.SelectionStart = this.comboBox1.Text.Length;
Cursor = Cursors.Default;
this.comboBox1.DroppedDown = true;
}
else
{
this.comboBox1.Items.Add("");
this.comboBox1.SelectionStart = this.comboBox1.Text.Length;
}
}

实现combobox模糊查询的时候报错 InvalidArgument=“0”的值对于“index”无效的更多相关文章

  1. Winform如何实现ComboBox模糊查询

    最近朋友问了一个关于Winform实现ComboBox模糊查询的知识点,自己好久没有搞Winform了,就上手练了一下,废话不多说,进入正题. 前台设计: 前台就是一个简单的Form窗体+一个Comb ...

  2. Mybatis传多个参数的问题 及MyBatis报错 Parameter '0' not found. Available parameters are [arg1, arg0, param1 问题

    对于使用Mybatis ,传多个参数,我们可以使用对象封装外,还可以直接传递参数 对象的封装,例如查询对象条件basequery对象 <select id="getProductByP ...

  3. LoadXml 加载XML时,报错:“根级别上的数据无效。 行1,位置1“

    ==XML=================================== <?xml version="1.0" encoding="utf-8" ...

  4. Python2.7在Windows下CMD编码为65001/utf-8时print报错[Errno 0]/[Errno 2]

    使用python2.7处理unicode的字符串,环境变量已设置PYTHONIOENCODING为utf-8,cmd编码为utf-8时print unicode字符串会报错[Errno 0]或[Err ...

  5. Ubuntu系统---报错Assertion '0' failed

    Ubuntu系统---报错Assertion '0' failed YOLO V3,CUDA Error: out of memory darknet: ./src/cuda.c:36: check_ ...

  6. SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 -

    SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 - 元旦刚过,就收到客户的业务人员报错说,当其对HU做转库(同一个公司代码下工厂到 ...

  7. 【EasyUI】combotree和combobox模糊查询

    这里说的模糊查询指在输入框输入,然后自动在下拉框中显示匹配结果,类似Google搜索提示 EasyUI库已经实现了combobox的查询过滤功能,但只能从头匹配,原因是EasyUI库的代码限制: fi ...

  8. easyui combobox模糊查询

    用easyui框架开发的攻城狮恐怕都遇到过这样一个问题,就是在新增页面combobox下拉框需要支持模糊查询,但是输入不是combobox中Data里面的值的时候,点击保存,依然是可以新增进去的,这样 ...

  9. 十六:SQL注入之查询方式及报错盲注

    在很多注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL查询语句有问题,这时候我们需要用到相关的报错或者盲注进行后续操作,同时作为手工注入的时候,需要提前了解SQL语句能更好的选择对应 ...

随机推荐

  1. MYSQL中IN与EXISTS的区别

    在MYSQL的连表查询中,最好是遵循‘小表驱动大表的原则’ 一.IN与EXISTS的区别1.IN查询分析SELECT   *  FROM A WHERE id IN (SELECT id FROM B ...

  2. macaca搭建

    对于新鲜的事务总是那么好奇,在自动化的过程中,有幸了解到macaca,记录下安装过程,具体介绍请移步官网:https://github.com/macacajs/ python版本参考:https:/ ...

  3. JavaWeb(四):JDBC

    数据持久化(persistence) 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各 ...

  4. Xib中用自动布局设置UIScrollView的ContenSize

    1. 在UIScrollView上拖一个UIView 2.设置UIScrollView上下左右约束为0,设置UIView上下左右约束为0,并且设置水平中线约束.那么可以把水平中线约束拖到对应视图,利用 ...

  5. C# 与 C++,语法差别有多小-第二章 C++浏览

    (一)动态内存分配和指针 C++:new  和 delete                                  int *arr = new int[ 4 ]; C#:只有new,de ...

  6. statistic_action

    方差variance 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数.V 离差平方和(Sum of Squares of Deviations)是各项与平均项之差的平方的 ...

  7. ubuntu 虚拟机安装vmware tools

    1.打开ubuntu虚拟机,点击“虚拟机”---> "安装   vmware tools" 2.进入vmware tools光盘,将VMwaretools压缩包复制粘贴到桌面 ...

  8. 【MEAN Web开发】CentOS 7 安装MongoDB 3.2.3

    偶然得了一本书,AmosQ.Haviv 所著 <MEAN Web开发>.起初并不知道这啥东西,看了下目录发现正好有讲MongoDB而已.当时的项目正好需要做MongoDB的内容,之后这书就 ...

  9. zookeeper centos分布式安装使用

    1. 请先安装jdk和下载zookeeper.ssh免密登录请自行配置.大家可以到官网下载或我的网盘. 网盘地址: 共3台机器c0,c1,c2 192.168.132.148 c0192.168.13 ...

  10. 002-Visio绘制时序图

    一.概述 1.1.什么时候使用 当编码的时候,知道有的用例的业务逻辑按照比较确定的时间先后顺序进行展开.这时候,我们就需要知道我们设计的系统中的不同类之间传递消息(可以认为是不同对象函数间的调用)要按 ...