2017-10-11 102 views
0

我坚持这一点,如果我在文本框中输入6个数字我的代码运行,但不包括6个字符。 这里是我的代码:在文本字符长度

Private Sub NumberValidationTextBox(sender As Object, e As TextCompositionEventArgs) 
    Console.WriteLine(datumTbox.Text.Length) 
    Dim regex As New Regex("[^0-9]+") 
    e.Handled = regex.IsMatch(e.Text) 
    If Len(datumTbox.Text) = 5 Then 
     Dim aa As String = datumTbox.Text 
     Dim i As Integer = 2 
     While i < aa.Length 
      aa = aa.Insert(i, "/") 
      i += 3 
     End While 
     datumTbox.Text = aa 
     Dim value As String = aa 
     Dim time As DateTime = DateTime.Parse(value) 
     Console.WriteLine(aa) 
    Else 
    End If 
End Sub 

<TextBox PreviewTextInput="NumberValidationTextBox" x:Name="datumTbox" HorizontalAlignment="Right" Height="22" Margin="0,10,237,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" IsTabStop="False"/> 

对于字符串:171291写入控制台17/12/9,不知我的最后一个字符被排除字符串连寿是最后一个字符大火了'如果len(datumTbox.Text)= 5然后'

+0

尝试用'虽然我<= aa.Length' – Nino

+0

是的,它会打到'If',但它的长度是6所以这将是错误的,并放入你的'Else'。假设这是一个onchange事件处理程序,当你键入的第5字符,则不会再传递如果检验六号正在做的输出。 –

+0

我怎么会排除最后一个字符? @JamesThorpe – RaceLt

回答

0

它看起来像你试图解析一个日期值,输入到格式为ddMMyy的TextBox中,通过遍历在dd和MM之后附加“/”的String,然后使用DateTime .Parse。这不是正确的做法。

只需使用DateTime.TryParseExact解析输入,然后从转换后的日期值返回所需的格式。这里是我的意思的例子:

Dim time As DateTime 
Dim deDE As New CultureInfo("de-DE") 'Since datumTbox.Text is German 

If Date.TryParseExact(datumTbox.Text, "ddMMyy", deDE, DateTimeStyles.None, time) Then 
    Console.WriteLine(time.ToString("dd/MM/yy")) 
Else 
    Console.WriteLine("The input is not in a ddMMyy format") 
End If