2017-10-11 92 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