Csharp/C#教程:TextBox获取输入焦点时自动全选的实现方法分享

     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来作为获得输入焦点标记,实现上述自动全选逻辑引用内容      

代码如下:
 publicForm1()        
 {             
        InitializeComponent();
        textBox.Text=”AutoSelectTextDemo”;             
        textBox.Tag=false;             
        textBox.GotFocus+=newEventHandler(textBox_GotFocus);             
        textBox.MouseUp+=newMouseEventHandler(textBox_MouseUp);        
 }
 voidtextBox_MouseUp(objectsender,MouseEventArgse)        
 {            
        //如果鼠标左键操作并且标记存在,则执行全选            
      if(e.Button==MouseButtons.Left&&(bool)textBox.Tag==true)           
        {                 
                textBox.SelectAll();            
        }
       //取消全选标记             
     textBox.Tag=false;        
 }
 
 voidtextBox_GotFocus(objectsender,EventArgse)       
 {             
           textBox.Tag=true;   //设置标记             
        textBox.SelectAll();  //注意1        
 }

  值得提出的是,虽然MouseUp事件已经执行了全选,但代码中的“注意1”位置,GotFocus事件中我们还是要再执行一次全选,原因是让TextBox获得焦点的方法,除了通过鼠标点击,还可能通过Tab切换焦点实现的,此时就不会触发MouseUp,但也因此不会有被MouseUp取消全选的问题,因此在GotFocus事件中还是有必要执行一次全选。

标签: ext 全选 方法 输入 ex 自动

算法详解之分治法具体实现

C# 静态构造函数使用上述就是C#学习教程:TextBox获取输入焦点时自动全选的实现方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904445.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐