我有一个带掩码的文本框,输入掩码为A-00-000-0000
它从数据库中获取数据。喜欢
如上所述,有没有办法将插入位置设置到特定位置?
答案 0 :(得分:1)
textBox1.Focus();
textBox1.SelectionStart = 8;
textBox1.SelectionLength = 0;
(selectionStart设置位置 - 长度为0,因此未选择任何内容。)
所以在你的情况下,你将SelectionStart设置为8,然后设置为3,然后设置为7 ...
请务必先将焦点设置到此textBox / Maskedtextbox,否则它将无法正常工作......
编辑: 您必须确保在将文本设置为DB中的值后,将根据掩码字符计算插入位置。
EDIT2: 像这样我可以在任何地方设置位置 - 只需4,将位置设置为关于面具的位置4。如果我省略SelectionStart和SelectionLength,则插入符将自动定位到第一行插入的最后一个字符。
maskedTextBox1.Text = "A018";
maskedTextBox1.Focus();
maskedTextBox1.SelectionStart = 7;
maskedTextBox1.SelectionLength = 0;
答案 1 :(得分:1)
一种简单的方法是使用反向循环并检查每个char。如果它不是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)
答案 2 :(得分: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