欢迎来到天天文库
浏览记录
ID:38587893
大小:1.42 MB
页数:11页
时间:2019-06-15
《利用C#制作一个仿IE地址栏的文本框》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、利用C#制作一个仿IE地址栏的文本框丽水市汽车运输集团有限公司信息中心苟安廷利用IE上网时,只要在地址栏中输入几个字母,与这几个字母模糊匹配的地址就会自动显示出来供用户选择(如下图),用户通过按键盘上的上、下箭头在已有选项中遍历,找到自己需要的选项后,按回车键进行选择,也可以直接用鼠标进行操作,非常方便,我们在程序中也可以利用这一功能,实现自动提示,方便用户输入,下面就以一个实际例子介绍我在工作中是如何实现的。从上图中可以看出,最佳的办法似乎就是继承ComboBox写一个控件,在TextChanged事件中,根据内容变
2、化决定是否应拉下提示框,以及该提示什么内容,在实际工作中我们发现,ComboBox非常难以控制,如修改了SelectedIndex属性后,会自动产生TextChanged事件,造成死循环等等,虽然可以添加其他一些变量来标记该文本改变是用户引起的还是由程序引起的以进行区别对待处理,但效果始终不理想,经过反复试验,最后选择了文本框+列表框的方式,并做成控件库供其他程序调用,效果很理想,其中,文本框接收用户输入,列表框提供选项让用户选择。新建一个普通的windows应用程序用来测试,不妨取名为Test吧,然后单击菜单“文件”
3、→“添加项目”→“新建项目(N)”,从弹出来的对话框选择“windows控件库”,将该项目和Test项目放在同一个文件夹中,不妨取名为“TextBoxExt”,该项目是本文的重点。在“解决方案资源管理器”中,右键单击“TextBoxExt”项目,从弹出的菜单中选择“属性”,会弹出属性配置对话框,在左上角的“配置(C)”中选择“所有配置”,设置输出路径为“..output”,注意,该输入有点特殊,两个小数点+反斜杠+output,意思是当前文件夹上一层的ouput文件夹(从VC过来的朋友可能比较熟悉这种方式),如下图:
4、编译一下,在“我的电脑”或“资源管理器”中我们可以就可以看到与TextBoxExt文件夹同一级自动创建了一个output文件夹,输出的TextboxExt.dll乖乖地躺在这里:再来配置一下依赖性,点菜单“项目”→“设置依赖性(D)”,设置项目Test取决于“TextBoxExt”,至此,开发环境配置完毕。在“解决方案资源管理器”中双击“UserControl1.cs”文件,再切换到代码窗口中。为便于引用,我们将命名空间“namespaceTextBoxExt”改为“namespaceTools”,由于本控件继承于文本
5、框,因此,将代码publicclassUserControl1:System.Windows.Forms.UserControl{publicUserControl1(){InitializeComponent();}修改为:publicclassTextBoxExt:System.Windows.Forms.TextBox{privateSystem.ComponentModel.Containercomponents=null;publicTextBoxExt(){}也就是说将命名空间改为Tools,将类名改为Te
6、xtBoxExt,让该类继承于System.Windows.Forms.TextBox,并修改相应的构造函数。编译成功后,在“解决方案资源管理器中”双击项目“Test”的“Form1.cs”来切换到窗体设计,在“工具箱”窗口中切换到“我的用户控件”选项中,在空白处单击右键,从弹出的菜单中选择“添加/移出项”,接下来会弹出一个对话框,点“浏览”按钮,找到刚才生成的控件库,如下图:最后点“确定”按钮,在“工具箱”的“我的控件库”中就多了一个“TextBoxExt”控件,同操作普通文本框控件一样,在窗体上添加几个该自定义控件
7、。可以看出,该文本框和平时使用的文本框目前完全一样。切换到UserControl1.cs代码设计窗口中,添加一个列表框变量,用于显示提示:privateSystem.Windows.Forms.ListBoxm_lstShowChoice=null;添加一段代码,用于响应列表框鼠标的MouseUp事件,也就是用户通过单击列表框进行选择:privatevoidlstBox_MouseUp(objectsender,System.Windows.Forms.MouseEventArgse){ListBoxbox=(List
8、Box)sender;if((box.SelectedIndex>-1)&&!this.ReadOnly){this.Text=box.SelectedItem.ToString();//选择后文本框失去了焦点,这里移回来this.Focus();}}添加鼠标在列表框中移动的事件,当用户在列表框中移动鼠标时,根据鼠标位置,自动设置
此文档下载收益归作者所有