簡體   English   中英

將插入符號位置設置為蒙版文本框中的最后一個字符-Winform?

[英]set caret position to last character in masked text box - winform?

我有一個帶有輸入掩碼為A-00-000-0000的掩碼文本框
它從數據庫獲取數據。 喜歡
蒙版文字框

如上所述,有什么方法可以將插入符號位置設置為特定位置?

您可能想嘗試這樣的事情:

textBox1.Focus();
textBox1.SelectionStart = 8;
textBox1.SelectionLength = 0;

(selectionStart設置位置-長度為0,因此未選擇任何內容)。

因此,您需要將SelectionStart設置為8,然后設置為3,然后設置為7 ...

確保首先將焦點設置為此textBox / Maskedtextbox,否則它將無法工作...

編輯:您必須確保在將文本設置為數據庫中的值后,根據遮罩字符計算插入符位置。

Edit2:這樣,我可以在任意位置設置位置-只需4,就可以將位置設置為相對於蒙版的位置4。 如果我省略SelectionStart和SelectionLength,則插入標記會自動定位到第一行插入的最后一個字符。

maskedTextBox1.Text = "A018";
maskedTextBox1.Focus();
maskedTextBox1.SelectionStart = 7;
maskedTextBox1.SelectionLength = 0;

一種簡單的方法是使用反向循環並檢查每個字符。 如果它不是Hyphen也不是Space那么您已經到達輸入字符串的末尾。

Dim text As String = Me.MaskedTextBox1.Text
Dim index As Integer = 0
Dim character As Char = Nothing

For index = text.Length To 1 Step -1
    character = text.Chars((index - 1))
    If ((character <> "-"c) AndAlso (AscW(character) <> 32)) Then
        Exit For
    End If
Next

Me.MaskedTextBox1.Focus()
Me.MaskedTextBox1.[Select](index, 0)

優化代碼后,我的邏輯是將插入符號移動到所需位置,獨立於蒙版,並在該位置之后刪除字符串。

''' <summary>
'''  Set Caret Position to specific location and remove data After given Location
''' </summary>
''' <param name="MaskedTb"> Masked textbox</param>
''' <param name="Loct99">Location (Index) after which remove occured and caret is set</param>
''' <remarks></remarks>
Public Sub FocsToMaskedTb( MaskedTb As MaskedTextBox, ByVal Loct99 As Integer)
    If MaskedTb.Text.Length >= Loct99 Then
        MaskedTb.Text = MaskedTb.Text.Remove(Loct99)
    End If
    MaskedTb.SelectionStart = MaskedTb.MaskedTextProvider.LastAssignedPosition + 1
    '' I am using MaskedTextProvider Property
    '' If there is nothing in TextBox, MaskedTb.MaskedTextProvider.LastAssignedPosition = -1
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM