[英]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.