亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

TextBox獲取輸入焦點(diǎn)時(shí)自動(dòng)全選的實(shí)現(xiàn)方法

 更新時(shí)間:2013年03月08日 11:49:48   作者:  
TextBox獲取輸入焦點(diǎn)時(shí)自動(dòng)全選的實(shí)現(xiàn)方法,需要的朋友可以參考一下

      C#開發(fā)WinForm,如何實(shí)現(xiàn)TextBox獲取輸入焦點(diǎn)時(shí)自動(dòng)全選?   

      肯定不少朋友一看就會(huì)覺得再容易不過了:給TextBox添加GotFocus事件,然后在事件中調(diào)用TextBox.SelectAll()不就完事了嗎?巢皮一開始也理所當(dāng)然得這么認(rèn)為,但要是你試試這么做,你會(huì)發(fā)現(xiàn)的當(dāng)你用點(diǎn)擊鼠標(biāo)左鍵讓TextBox.獲得輸入焦點(diǎn)時(shí),里面的文本根本不會(huì)全選。   

      這是why咧?原因是通過鼠標(biāo)讓TextBox獲得輸入焦點(diǎn)時(shí),TextBox觸發(fā)的事件順序是:MouseDown->GotFocus->MouseUp,也就是說TextBox在鼠標(biāo)按下的那一刻已經(jīng)獲得了輸入焦點(diǎn),此時(shí)可以對(duì)文本全選。但郁悶的是,MouseUp卻會(huì)取消TextBox的文本選中狀態(tài)...也就是說文本其實(shí)曾經(jīng)被全選了,但立即又被取消選中(-_-#)   

     這樣也好辦啊,那我改在MouseUp事件中TextBox.SelectAll()不就成了?這么一改,鼠標(biāo)左鍵點(diǎn)擊TextBox還真的能實(shí)現(xiàn)全選,然而新的問題又會(huì)發(fā)現(xiàn):當(dāng)你希望再次左鍵點(diǎn)擊TextBox取消全選時(shí),會(huì)發(fā)現(xiàn)TextBox仍然在全選。   

     根據(jù)上述描述,大致可以摸清這樣一個(gè)邏輯:   

     1、如果TextBox本身未獲得焦點(diǎn),則點(diǎn)擊鼠標(biāo)左鍵獲得焦點(diǎn)后,執(zhí)行全選。   

     2、如果TextBox本身已經(jīng)獲得焦點(diǎn),則點(diǎn)擊鼠標(biāo)左鍵則不再執(zhí)行全選。
  

    根據(jù)上面的邏輯,其實(shí)只要在TextBox從無輸入焦點(diǎn)到獲得輸入焦點(diǎn)的時(shí),針對(duì)鼠標(biāo)左鍵點(diǎn)擊操作才做一次全選,否則不做全選操作,因此可以用一個(gè)變量作為TextBox從無輸入焦點(diǎn)到獲得輸入焦點(diǎn)的標(biāo)記,當(dāng)鼠標(biāo)左鍵點(diǎn)擊判斷到這個(gè)標(biāo)記存在時(shí),執(zhí)行一次全選操作,并把這個(gè)標(biāo)記取消,這樣就可以實(shí)現(xiàn)上述邏輯了。   

     下面的代碼使用TextBox.Tag來作為獲得輸入焦點(diǎn)標(biāo)記,實(shí)現(xiàn)上述自動(dòng)全選邏輯引用內(nèi)容      

復(fù)制代碼 代碼如下:

  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)        
 {            
         //如果鼠標(biāo)左鍵操作并且標(biāo)記存在,則執(zhí)行全選            
       if (e.Button == MouseButtons.Left && (bool)textBox.Tag == true)           
         {                 
                 textBox.SelectAll();            
         }

        //取消全選標(biāo)記             
      textBox.Tag = false;        
 }

 
 void textBox_GotFocus(object sender, EventArgs e)       
  {             
            textBox.Tag = true;    //設(shè)置標(biāo)記             
         textBox.SelectAll();   //注意1        
 }

  值得提出的是,雖然MouseUp事件已經(jīng)執(zhí)行了全選,但代碼中的“注意1”位置,GotFocus事件中我們還是要再執(zhí)行一次全選,原因是讓TextBox獲得焦點(diǎn)的方法,除了通過鼠標(biāo)點(diǎn)擊,還可能通過Tab切換焦點(diǎn)實(shí)現(xiàn)的,此時(shí)就不會(huì)觸發(fā)MouseUp,但也因此不會(huì)有被MouseUp取消全選的問題,因此在GotFocus事件中還是有必要執(zhí)行一次全選。

相關(guān)文章

最新評(píng)論