none
[vb2005]Tab鍵選取TextBox問題 RRS feed

  • 問題

  •  

    請問如果使用Tab鍵移動到TextBox的元件上後

    游標(焦點)會移到TextBox的元件上

    但是假如在TextBox上已經有存在文字的話

    要如何做才能讓這些TextBox上的文字是呈現全部被選取的狀態

    (也就是當使用者按下Tab鍵後, 焦點會移到 TextBox-A 元件上, 並且在 TextBox-A 元件上原本已存在的文字內容是會呈現被全部選取的狀態, 當使用者再按下 'A' 按鈕後, TextBox-A 元件上原本的文字內容將全部被清除掉, 變成使用者最後輸入的那個 'A' 字元)

     

    不知道在TextBox元件上本身的屬性就可以設定了, 還是需要寫程式去控制才行?

     

    上面的描述不知道會不會看不懂@@

    其實我只是想要達到一般網頁上我們在輸入基本資料的時候, 按下Tab鍵到輸入欄位上的時候, 原本欄位上已經輸入的文字就會被全部選起來了, 接著我們再隨便輸入一個字就會把原本的字都清掉了

     

    因為我本來以為TextBox預設值就是這種行為了, 結果在測試得時候才發現不是這樣, 不曉得是要設哪個屬性還是要用程式控制,請知道的人幫忙解答, 謝謝

     

    2008年10月17日 上午 06:25

解答

  • 你可以寫一個 TextBox.GotFocus 的事件常式,在裡面用 TextBox.SelectAll() 即可將文字方塊中的字都選取起來。

     

    example:

     

    Code Snippet

    private void TextBox_GotFocus(object sender, EventArgs e)

    {

       (sender As TextBox).SelectAll();

    }

     

     

     

    2008年10月17日 上午 06:34
    版主
  • 又或者你可在textbox.enter event 裡加入

    .SelectAll()

     

        Private Sub textbox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles textbox.Enter
            textbox.SelectAll()
        End Sub

    2008年10月17日 上午 06:51
  • 上面那段應該改成 sender.SelectAll()

     

    通用的方法可以讓 Handles 後面繼續加事件,抽出來寫 Sub 也可以,不過一行程式碼實在沒必要抽出來。

     

    Code Snippet

    Sub TextBoxSelectAll(Byval Sender As Object)

    Sender.SelectAll()

    End Sub

     

     

     

     

    2008年10月17日 上午 07:30

所有回覆

  • 你可以寫一個 TextBox.GotFocus 的事件常式,在裡面用 TextBox.SelectAll() 即可將文字方塊中的字都選取起來。

     

    example:

     

    Code Snippet

    private void TextBox_GotFocus(object sender, EventArgs e)

    {

       (sender As TextBox).SelectAll();

    }

     

     

     

    2008年10月17日 上午 06:34
    版主
  • 謝謝你的解答, 大概知道要怎樣做了

    不過這段程式好像是 C 的語法@@

    函式中間那段如果要轉成VB語法的話, 請問要怎麼寫呢??

     

    Code Snippet


        Private Sub TextBox_GotFocus(ByVal sender As System.Object, ByVal e As EventArgs)

                      ????

        End Sub

     

     

     

    2008年10月17日 上午 06:49
  • 又或者你可在textbox.enter event 裡加入

    .SelectAll()

     

        Private Sub textbox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles textbox.Enter
            textbox.SelectAll()
        End Sub

    2008年10月17日 上午 06:51
  •  

    謝謝你, 這種方式的確可以達到我想要的效果

    不過我還是有一點疑問題

    假如有很多個TextBox都要用到這種方式

    是不是每一個TextBox都要寫一個sub然後再去指定它的事件

    或是可以使用一個通用的sub , 讓每個元件都能夠指定它來套用這個效果??

    2008年10月17日 上午 07:02
  • 上面那段應該改成 sender.SelectAll()

     

    通用的方法可以讓 Handles 後面繼續加事件,抽出來寫 Sub 也可以,不過一行程式碼實在沒必要抽出來。

     

    Code Snippet

    Sub TextBoxSelectAll(Byval Sender As Object)

    Sender.SelectAll()

    End Sub

     

     

     

     

    2008年10月17日 上午 07:30
  • 感謝你的回覆

    我想在Handles後面繼續加事件會是個比較方便的方法吧

    不然加了一堆Sub光看起來就覺的很多了@@

    Code Snippet

     

    private sub ...(...) Handles textbox1.Enter, textbox2.Enter, textbox3.Enter ...

      ...

    end sub

     

     

     

    2008年10月17日 上午 07:45
  • 各位好:

     

    請教一下, 在一個 FORM 裡面, 如果有 20 個 textbox, 每個 textbox 都要達到 selectall() 的效果的話, 在 handle 後面加上這 20 個 textbox 的方式, 似乎有點太不聰敏.

     

    請問有 globle , 例如寫在 form 上面的做法嗎?

     

    因為小弟有個需求, 是在一個 FORM 的任何位置, 點滑鼠兩下, 就要 msgbox 出這個物件的名字 (包含 label, panel... 等),

    若要一個一個家, 不僅維護上麻煩, 也可能會漏掉.

     

    請指教, 謝謝.

    2008年10月19日 上午 01:58
  • 回歸底層來看,有 hWnd 的物件,系統在傳遞事件時,會直接 SendMessage / PostMessage 到物件,不會經過上層的所有物件,所以不能寫在 Form 的事件上。

     

    但是你可以在 Form Load 事件上用迴圈處理所有的控制項加上事件,請查詢:

    AddHandler

    的用法。

     

    通常這類狀況會用在動態產生物件上,你也可以這樣使用。

     

    利用 Form.Controls 來列舉你的控制項。

    • 已提議為解答 Streit Huang 2009年12月5日 下午 07:40
    2008年10月19日 上午 03:32
    版主