2013-10-11 4 views
0

Мне нужно создать код, который будет делать следующее. Пользователь вводит только цифры, которые я закодировал с помощью события нажатия клавиши. Далее длина даты может быть длиной всего 8 символов. mm/dd/yy Также в этом состоянии мне нужно, чтобы месяц, день и год сохранялись в разных переменных, чтобы я мог проверять индивидуально, если правильная дата каждого месяца, дня и года верна. например, у нас не более 12 месяцев в году. Поэтому я думал об использовании подстроки, чтобы разделить одну переменную, которая содержит ввод текстового поля, а затем проверять индивидуально.Visual Studio/Visual Basic Текстовое поле получает только форматированную дату

Я действительно понимаю, что есть встроенные функции, но в этом случае мне не разрешено использовать их.

Private Sub btnCheckDate_Click(sender As Object, e As EventArgs) Handles btnCheckDate.Click 

Dim strDate As String 
Dim badDate As Boolean = False 

    strDate = txtInput.TabIndex 
    If strDate.Length <> 8 Then 
     MessageBox.Show("Bad date") 
     txtInput.Text = String.Empty 
     txtInput.Focus() 
    End If 

    Dim intMonth As Integer 
    Dim intDay As Integer 
    Dim intYear As Integer 

    intMonth = CInt(strDate.Substring(0, 2)) 
+2

Используйте 'Date.ParseExact (strDate," MM/dd/yy ", CultureInfo.InvariantCulture) вместо. Вы можете использовать 'Date.TryParseExact' с тем же форматом для проверки ввода. –

+0

Что вы подразумеваете под «Я не могу использовать встроенные функции»? 'Substring' - это« встроенная функция »(как« Date.Parse »или любой другой метод, который вы хотите вызвать). – pescolino

+0

Я предполагаю, что это означает функции проверки даты. Используйте подстроку, чтобы отрубить ее, преобразовать в int, а затем проверить каждое значение. Я хотел бы получить дополнительный кредит и разрешить 8 или 10 символов (MM/DD/YYYY), поскольку он изменит только то, как вы собираете стоимость за год. Переход на дополнительный экстренный кредит, чтобы сделать каждую проверку вызванной функцией, возвращающей T/F. Подсказка: сделайте месяц первым. – Plutonix

ответ

0

Я предполагаю, что, когда вы говорите, что не можете использовать встроенные функции, вы имеете в виду функции даты и времени. Вот один простой способ проверки текста и положить каждую часть в переменную:

Dim strDate As String = txtInput.Text 
Dim intMonth As Integer 
Dim intDay As Integer 
Dim intYear As Integer 
Dim badDate As Boolean = True 
If strDate.Length = 8 Then 
    Dim DateParts As List(Of String) = txtInput.Text.Split("/"c).ToList 
    If DateParts.Count = 3 Then 
     If Integer.TryParse(DateParts(0), intMonth) AndAlso Integer.TryParse(DateParts(1), intDay) AndAlso Integer.TryParse(DateParts(2), intYear) Then 
      If intMonth <= 12 AndAlso intDay <= 31 AndAlso intYear <= 20 Then 
       badDate = False 
      End If 
     End If 
    End If 
End If 
If badDate = True Then 
    MessageBox.Show("Bad date") 
    txtInput.Text = String.Empty 
    txtInput.Focus() 
End If 

Там в другой проверки того, что может быть сделано месяцев разной длины и високосный год. Просто добавьте дополнительные условные операторы.

Я изменил badDate по умолчанию на True, кажется, имеет смысл, когда вы его читаете.

Смежные вопросы