将插入位置设置为蒙版文本框中的最后一个字符 - winform?

时间:2014-09-15 06:27:25

标签: c# .net vb.net winforms

我有一个带掩码的文本框,输入掩码为A-00-000-0000
它从数据库中获取数据。喜欢
 Masked TextBox

如上所述,有没有办法将插入位置设置到特定位置?

3 个答案:

答案 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