时间:2021-05-02
C#开发WinForm,如何实现TextBox获取输入焦点时自动全选?
肯定不少朋友一看就会觉得再容易不过了:给TextBox添加GotFocus事件,然后在事件中调用TextBox.SelectAll()不就完事了吗?巢皮一开始也理所当然得这么认为,但要是你试试这么做,你会发现的当你用点击鼠标左键让TextBox.获得输入焦点时,里面的文本根本不会全选。
这是why咧?原因是通过鼠标让TextBox获得输入焦点时,TextBox触发的事件顺序是:MouseDown->GotFocus->MouseUp,也就是说TextBox在鼠标按下的那一刻已经获得了输入焦点,此时可以对文本全选。但郁闷的是,MouseUp却会取消TextBox的文本选中状态...也就是说文本其实曾经被全选了,但立即又被取消选中(-_-#)
这样也好办啊,那我改在MouseUp事件中TextBox.SelectAll()不就成了?这么一改,鼠标左键点击TextBox还真的能实现全选,然而新的问题又会发现:当你希望再次左键点击TextBox取消全选时,会发现TextBox仍然在全选。
根据上述描述,大致可以摸清这样一个逻辑:
1、如果TextBox本身未获得焦点,则点击鼠标左键获得焦点后,执行全选。
2、如果TextBox本身已经获得焦点,则点击鼠标左键则不再执行全选。
根据上面的逻辑,其实只要在TextBox从无输入焦点到获得输入焦点的时,针对鼠标左键点击操作才做一次全选,否则不做全选操作,因此可以用一个变量作为TextBox从无输入焦点到获得输入焦点的标记,当鼠标左键点击判断到这个标记存在时,执行一次全选操作,并把这个标记取消,这样就可以实现上述逻辑了。
下面的代码使用TextBox.Tag来作为获得输入焦点标记,实现上述自动全选逻辑引用内容
复制代码 代码如下:
值得提出的是,虽然MouseUp事件已经执行了全选,但代码中的“注意1”位置,GotFocus事件中我们还是要再执行一次全选,原因是让TextBox获得焦点的方法,除了通过鼠标点击,还可能通过Tab切换焦点实现的,此时就不会触发MouseUp,但也因此不会有被MouseUp取消全选的问题,因此在GotFocus事件中还是有必要执行一次全选。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
有时我们想在textbox控件获得焦点时而选中textbox中的所有文本,这可通过SelStart和SelLength属性来达到。具体来讲就是在对象得到焦点时,
AngularJSng-focus指令AngularJS实例当输入框获取焦点时执行表达式:{{count}}该实例在输入框每次获取焦点时,计算变量"count"
本文实例讲述了C#中TextBox实现输入提示功能的方法。分享给大家供大家参考。具体如下:设置TextBox的AutoCompleteSource的属性为Cus
textarea默认字颜色以及获取焦点后的字的颜色,焦点获取后使默认消失输入您要输入的内容select默认选中项颜色为灰色,选择后变为黑色(js实现)varun
当TextBox得到焦点时(GotFocus)改变文本颜色,失去焦点时(LostFocus)将还原文本颜色,ForeColor是设置文本的前景色。'当光标移到T