服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - TextBox获取输入焦点时自动全选的实现方法

TextBox获取输入焦点时自动全选的实现方法

2020-12-19 15:30C#菜鸟教程 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来作为获得输入焦点标记,实现上述自动全选逻辑引用内容      

 

复制代码 代码如下:

  public Form1()        
  {             
         InitializeComponent();
         textBox.Text = "Auto Select Text Demo";             
         textBox.Tag = false;             
         textBox.GotFocus += new EventHandler(textBox_GotFocus);             
         textBox.MouseUp += new MouseEventHandler(textBox_MouseUp);        

 }

  void textBox_MouseUp(object sender, MouseEventArgs e)        
 {            
         //如果鼠标左键操作并且标记存在,则执行全选            
       if (e.Button == MouseButtons.Left && (bool)textBox.Tag == true)           
         {                 
                 textBox.SelectAll();            
         }

        //取消全选标记             
      textBox.Tag = false;        
 }

 
 void textBox_GotFocus(object sender, EventArgs e)       
  {             
            textBox.Tag = true;    //设置标记             
         textBox.SelectAll();   //注意1        
 }


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

 

延伸 · 阅读

精彩推荐
  • C#C#通过KD树进行距离最近点的查找

    C#通过KD树进行距离最近点的查找

    这篇文章主要为大家详细介绍了C#通过KD树进行距离最近点的查找,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    帆帆帆6112022-01-22
  • C#WPF 自定义雷达图开发实例教程

    WPF 自定义雷达图开发实例教程

    这篇文章主要介绍了WPF 自定义雷达图开发实例教程,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下...

    WinterFish13112021-12-06
  • C#C#裁剪,缩放,清晰度,水印处理操作示例

    C#裁剪,缩放,清晰度,水印处理操作示例

    这篇文章主要为大家详细介绍了C#裁剪,缩放,清晰度,水印处理操作示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    吴 剑8332021-12-08
  • C#C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    这篇文章主要介绍了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题,简单描述了访问者模式的定义并结合具体实例形式分析了C#使用访问者模式解决长...

    GhostRider9502022-01-21
  • C#C#实现XML文件读取

    C#实现XML文件读取

    这篇文章主要为大家详细介绍了C#实现XML文件读取的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交错数组与隐式类型的数组

    深入解析C#中的交错数组与隐式类型的数组

    这篇文章主要介绍了深入解析C#中的交错数组与隐式类型的数组,隐式类型的数组通常与匿名类型以及对象初始值设定项和集合初始值设定项一起使用,需要的...

    C#教程网6172021-11-09
  • C#C# 实现对PPT文档加密、解密及重置密码的操作方法

    C# 实现对PPT文档加密、解密及重置密码的操作方法

    这篇文章主要介绍了C# 实现对PPT文档加密、解密及重置密码的操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    E-iceblue5012022-02-12
  • C#Unity3D实现虚拟按钮控制人物移动效果

    Unity3D实现虚拟按钮控制人物移动效果

    这篇文章主要为大家详细介绍了Unity3D实现虚拟按钮控制人物移动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    shenqingyu060520232410972022-03-11