VS 2013Ultimate 开发过程中遇到的问题——listbox的隐藏问题,combobox.textchanged的中文问题
最近项目有需求,就是把一个combobox让它可以根据用户输入的汉字就行模糊查询出匹配的下拉框内容,很简单,是吧
但是!!!在开发中真是遇到了不少问题呢。
一、实现流程
1)我的实现思维是这样的,先把combobox的DropDownStyle改为DropDown,让用户可以输入
2)在combobox的TextChanged方法中,根据用户输入的内容在查询出来的datatable中进行筛选,然后重新绑定combobox
具体代码:

/// <summary>
/// 根据输入的汉字来筛选配送企业
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmn_corp_TextChanged(object sender, EventArgs e)
{
if (!loading)//这个loading是为了确保在窗体load事件中,能够把combobox的绑定事件完全走完,要不获取combobox.selectedValue的值的时候会报错。
{
loading = true;
if (corpDt == null || corpDt.Rows.Count <= ) return;
string corpName = cmn_corp.Text.Trim();
DataView corpDv = DbHelper.GetDataView(corpDt);
if (corpDv == null) return;
corpDv.RowFilter = " company_name like '%" + corpName + "%'";
ComboBoxHelper.BindComboBox(corpDv.ToTable(), cmn_corp, "company_name", "company_id");
loading = false; //this.cmn_corp.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
//this.cmn_corp.AutoCompleteSource = AutoCompleteSource.ListItems;//这两行代码能大致实现问题,但是筛选只是从开头匹配,like 'XX%'
}
}
最后,实现不了,因为combobox的TextChanged方法对于中文,是这样的,你在combobox里面输入“天啊”,text取值的时候只能取到“天”,然后等到“天”有匹配,匹配好的时候,会再次触发TextChange事件,这次的Text的值就会是“啊”+匹配好的文字。说的有点乱,下面上图
这是下拉框未筛选的时候:

打算筛选“国药啊”,三个字

输入到文本框的只有“国”

第一次筛选“国”:


成功筛选:

刚才看到文本框里只有个“国”,是不是以为后面的汉字就没了,消失了?并没有哦~只不过筛选是一个字一个字来的,但是我们又不知道用户会输入几个字来筛选,所以不能把筛选的文字拼在一起之后再筛选,也不能在第一个能筛选出结果之后就不匹配后面的文字,就变成了后面的尴尬情况。后面的第一个字+上一个筛选出来的文字连在一起组成了再次筛选的条件。于是,问题就来了,这个拼出来的完全不对,也肯定筛不出来我们想要的数据。


错误的筛选文字筛选出的结果:没有匹配项

小总结:不知道是我写的方法有问题,还是combobox的TextChanged事件就是对中文输入法不友好,我想说,如果你用这个方法并且成功实现了功能,那么请你不要吝啬,大方的在评论区分享一下啦
*****************************&&&&&&&&&&&&&&*******************……………………………我是凌乱的分隔符………………………¥¥¥¥¥¥¥¥¥@@@@@@@@@@@@~~~~~~~~~~~~~~~~~~-------------------
二、为了实现上个功能,我不能用combobox但是可以拼出来嘛,于是我用textbox和listbox代替了combobox

还挺好用的,就是在最后listbox小坑了我一把。
我想的是在窗体加载的时候把listbox隐藏,然后等textbox获得焦点的时候,让listbox显示,等筛选完,选择结果之后,再把listbox隐藏。。。可素!在窗体加载完之后,listbox不见了,但是它的滚动条却还在!还有在窗体load事件执行完之后,它的隐藏没有任何问题,把滚动条小尾巴藏得妥妥的。所以会是load没执行完的问题吗?可是load执行完之后,窗体也显示出来了,用户也能看到了,还怎么隐藏呢?【纠结.jpg】
先贴实现代码,最后给你们上让人哭泣的效果图

/// <summary>
/// textbox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txt_corp_TextChanged(object sender, EventArgs e)
{
if (!loading)
{
loading = true;
if (corpDt == null || corpDt.Rows.Count <= ) return;
string corpName = txt_corp.Text.Trim();
DataView corpDv = DbHelper.GetDataView(corpDt);
if (corpDv == null) return;
if (corpName != "")
corpDv.RowFilter = " company_name like '%" + corpName + "%'";
else
corpDv.RowFilter = " 1=1";
lb_corp.DataSource = corpDv.ToTable();
lb_corp.Visible = true;
loading = false;
}
} /// <summary>
/// listbox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lb_corp_SelectedIndexChanged(object sender, EventArgs e)
{
if (!loading)
{
loading = true;
txt_corp.Text = "";
txt_corp.Text = lb_corp.Text;
txt_corp.SelectAll(); DataRowView drv = lb_corp.SelectedItem as DataRowView;
if (drv != null)
{
string id = drv[lb_corp.ValueMember].ToString();
}
lb_corp.Visible = false;
loading = false;
}
}
效果图:特意在qq上做了个动态图,可是不让上传,只能自己想象动起来了





好啦,最后的最后,我也只是发现了问题,但是没有解决,希望大佬们知道我哪里错了能够毫不留情的指出,Thanks♪(・ω・)ノ~
======================================我是后续的分割线==================================================================
今天又尝试了一下listbox的隐藏问题,想着既然load事件中不能完全隐藏,load之后的事件能完全隐藏,那能不能在load事件执行完之后的自动事件中写隐藏语句呢?然后发现有Activated和Shown两个事件备选。再后来Activated可能会执行多次,在窗体打开,关闭时都会触发,而我只需要显示就好,所以选择了shown事件
private void FormTBDD_Shown(object sender, EventArgs e)
{
lb_corp.Visible = false;
}
注意:此时listbox的Visible属性必须为true,并且在窗体的load事件中不能对Visible属性有修改操作,不然Shown事件中的
lb_corp.Visible = false; 不起作用 再次打开窗体的时候就能发现,哈哈哈,滚动条不见啦,不过还是有点小瑕疵,在窗体打开的瞬间会闪一下,其实就是那一瞬间把滚动条隐藏了。虽然不尽人意,但也算是个小进步吧,加油!

这是窗体打开的一瞬间,我快速截的图,哈哈,label的text还没有完全显示出来呢,呐,是不是可以看到滚动条真的没有了~~~~
VS 2013Ultimate 开发过程中遇到的问题——listbox的隐藏问题,combobox.textchanged的中文问题的更多相关文章
- 一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法
这篇文章也许会不定时更新,主要记录这段时间内自己遇到的angularjs学习开发的一些问题的解决办法.本文以摘抄为主,主要目的还是将自己遇到的困惑在各个地方查到的解决办法的汇总,给自己留个备忘吧. 1 ...
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...
- web开发过程中经常用到的一些公共方法及操作
进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...
- Eclipse开发过程中个VM Arguments的设置
Eclipse开发过程中个VM Arguments的设置 1:jre中的Default VM Arguments: -Xms256M -Xmx640M -XX:PermSize=256m -XX:Ma ...
- 客户关系管理系统(CRM)的开发过程中使用到的开发工具总结
开发<客户关系管理系统(CRM)>软件过程,也就是一个标准的Winform程序的开发过程,我们可以通过这个典型的软件开发过程来了解目前的开发思路.开发理念,以及一些必要的高效率手段.本篇随 ...
- 软件开发过程中的审查 (Review)
http://blog.csdn.net/horkychen/article/details/5035769 软件开发过程中的审查 (Review) 希望别人做些什么->定义出流程 希望别人 ...
- javaweb开发过程中的地址写法
凡是要表示web资源的地址,比如浏览器地址栏中,都是 /凡是要表示硬盘地址, 都是 \ public class ServletDemo1 extends HttpServlet { //实际开发过 ...
- SpringMVC开发过程中的中文乱码问题
相信大家在开发初期遇到中文乱码问题一定是一头雾水,不是数据库乱码了就是页面乱码了或者传值时乱码.其实解决乱码的途径很简单,就是统一编码与解码的类型,我把自己遇到的乱码问题整理出来,希望能够对大家有用. ...
- net开发过程中Bin目录net开发过程中Bin目录下面几种文件
.net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...
随机推荐
- CentOS:xmr-stak-cpu安装,服务器CPU挖Monero门罗币
一.获取钱包地址 可以使用本地钱包地址.首先到Monero官网下载本地钱包,支持Windows 64-bit.Windows 32-bit.Mac OS X 64-bit.Linux 64-bit.L ...
- 不同IDE对maven项目静态资源处理
今天自己构建maven管理的web项目,参照另一位兄弟的代码,发现他的静态资源,也就是html.js之类的文件是在src/main/resource目录下的,我的在src/main/resource目 ...
- oracle ORA-02292: 违反完整约束条件
我是处于工作中没用过oracle的状态,这不,记录下这个小小的问题.哈哈. 表是公司的平台组定义的.前几天为了测试程序,想删掉一些记录,然后使用delete语句,出现这个东东:oracle ORA-0 ...
- 好奇,项目根目录下的.editorconfig文件
一..editorconfig文件是什么? 在项目里,大多时候都能看到.editorconfig文件,刚开始总是忽视掉它,认为它不太重要.但是,它的存在,必定有它的理由,于是,抽空来研究一下,它是什么 ...
- 我们来说说self.setinterval
学了js的你,肯定知道setInterval方法是按照指定的周期(以毫秒计)来调用函数或计算表达,setInterval方法会不停地调用函数,直到clearInterval被调用或窗口被关闭,这个se ...
- SVM小白教程(2):拉格朗日对偶
在上一篇文章中,我们推导出了 SVM 的目标函数: \[ \underset{(\mathbf{w},b)}{\operatorname{min}} ||\mathbf{w}|| \\ \operat ...
- pmi-ACP考试知识点梳理(部分)
敏捷宣言 个体和互动 高于流程和工具 工作的软件 高于详尽的文档 客户合作 高于合同谈判 响应变化 高于遵循计划 十二条敏捷原则 1 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意. ...
- 微信小程序开发学习(二)
一些官方API 总结了一些官方API,便于之后有用时针对性查找(发现官方给了好多好用的API)官方API文档 基础 wx.canIUse:判断小程序的API,回调,参数,组件等是否在当前版本可用,返回 ...
- Nginx:Linux下安装Nginx与配置
准备目录 [root@sijizhen ~]# mkdir /usr/local/nginx [root@sijizhen ~]# cd /usr/local/nginx/ 下载 1.Nginx,在h ...
- MySQL存储过程中的事务执行失败之后获取错误信息
1.表结构: 2. 存储过程中: 代码如下: BEGINDECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINROLLBACK;GET DIAGNOSTICS C ...