ComboBox.AutoCompleteMode 属性引起的莫名错误



ComboBox.AutoCompleteMode 属性引起的莫名错误

 Luo Weifeng 2011-3-17

今天老乡叫我去调一个bug,程序的逻辑很简单,就是一个模糊查询器。他的想法是,当用户在一个Combox里边输入时,程序自动的使用模糊查询检索可能的结果,以下拉列表的方式呈现出来。下面是程序的主要代码。它主要捕获combox中文本的change事件。可是这么一个简单的问题却让人调试了一天,这个程序在快速输入两个字母查询的时候会出现内存重写错误。我尝试着去掉Combox.Items.Clear()就不会出现内存重写错误,可是那样Combox会越来越多,我请了C#方面的一个牛人过去也没整明白。后来还是我老乡自己弄出来了。他将ComboBox.AutoCompleteMode的属性设置成none之后竟然好了。

 

 

这个问题至今我还没有想明白,有想明白的或懂的帮小弟解解惑,不胜感激。

后记:

 

貌似明白了,这与上边的代码没有什么联系。如下是实现类似百度搜索的东西。这样就知道为什么当AutoCompleteMode = Suggest而没有在代码里边指定AutoCompleteSource的时候就会出现内存错误了。MSDN有说http://msdn.microsoft.com/zh-cn/library/system.windows.forms.combobox.autocompletemode.aspx “AutoCompleteMode 和 AutoCompleteSource 属性必须一起使用。”所以才会出现上边的错误,呵呵,出错了学会在错误中总结。进步ing……

 

至于为什么在最初有combox.items.clear()就会报错的原因可能是这样的。首先输入一个j时,数据库里边查询到一个jlink和jsp所以她返回了数据,这里关键是事件的触法顺序,当输入第一个j时先触法的是text—changed事件,在text_changed事件中我们为combox添加了items,而后触法的是combox的自动补全事件,这时候combox的completesource是有内容的,所以不会出错,但是如果我们在text_changed事件的最后添加clear调用的话,那么在接下来的自动补全过程中,completesource是空的, 这与msdn上描述的需要同时使用completemode和completesource是违背的,剩下的事就是微软的事了,所以问题就这样产生了。调试起来也没有什么好的办法,因为这种奇妙的错误很难被察觉。所以说microsoft诚然做的很好,但是我们不能在任何领域都依赖他,特别是嵌入式领域,因为他的深度封装,致使在出现问题时不容易调试,比较晦涩。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值