Проверка выбора даты и времени в vb.net

#vb.net #validation #datetimepicker

#vb.net #проверка #выбор даты и времени

Вопрос:

Я пытаюсь выяснить, как проверить DateTimePicker ie, если DateTimePicker имеет значение null. Вот код

 Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
If DTDOB.Value = Nothing Then
            MessageBox.Show("Enter the date")
        Else
            MessageBox.Show("Date Saved")
End If
End Sub
  

Кто-нибудь может подсказать мне решение.
Заранее спасибо.
Обратите внимание, что DOTDOB — это мой DateTimePicker

Комментарии:

1. Свойство Value не может иметь значения null / ничего, что не оставляет много для проверки.

2. Выбор даты и времени. Значение не может быть ничем. смотрите: learn.microsoft.com/en-us/dotnet/api /…

3. Значения DateTime не могут быть null , но они могут быть Nothing . null и Nothing — это не одно и то же в VB. Чистая при использовании с типами значений.

4. Хорошо, но я хочу показать окно сообщения, если datepicker имеет значение null. Как я могу?

5. @MohitKamat Ты придаешь этому слишком большое значение… это не будет null . Если вы используете Visual Studio designer, VS гарантирует, что сам элемент управления в это время не равен null. И если элемент управления существует, он применит Value свойство is между MinDate и MaxDate , которые вы установили. Здесь будет какое-то значение.

Ответ №1:

DateTime Переменные .Net, такие как DTDOB.Value , являются типами значений. Это означает, что они никогда не могут быть null .

В VB.Net Nothing ключевое слово при использовании с типом значения будет соответствовать значению типа по умолчанию. Для DateTime значений это то же самое, что DateTime.MinValue или полночь 1 января 0001 года.

Таким образом, вы могли бы вместо этого написать этот код для сравнения с DateTime.MinValue , но я думаю, что то, что у вас есть, лучше выражает намерение. Если код, который у вас есть, работает, я не вижу в этом проблемы. И если это не сработает, пожалуйста, объясните лучше в вопросе, почему это не удается.

Комментарии:

1. На самом деле я уже установил минимальное значение и максимальное значение в самих свойствах DateTimePicker.

2. В этом случае вы уже гарантированно DTDOB.Value находитесь в пределах этого диапазона. Элемент управления не позволит вам установить значение, выходящее за пределы диапазона.

Ответ №2:

Возможно, вы неправильно задали вопрос, элемент управления DateTimePicker всегда имеет значение, отличное от ничего, указанного при инициализации формы. Это значение находится между minDate и maxDate. Если вы попытаетесь установить значение Nothing, вы получите сообщение об ошибке. По умолчанию значением DateTimePicker являются текущие дата и время.

Можно было бы сохранить значение DTDOB.Value в переменной или в ее теге и сравнить его со значением, которое у вас есть при запуске события click кнопки.

Ответ №3:

(Автор опубликовал крошечный фрагмент кода в комментарии, который с тех пор был удален.)

Вы установили для пользовательского формата пустую строку, чтобы показать, что значение не было выбрано, и это нормально. Если вы хотите проверить это, вы могли бы вместо этого использовать .Text свойство или, возможно, проверить, является ли .CustomFormat » «.

Вот возможный подход. После того, как выбор был сделан, измените его на другой формат:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    DTDOB.CustomFormat = " " 'An empty SPACE
    DTDOB.Format = DateTimePickerFormat.Custom
End Sub

Private Sub DTDOB_ValueChanged(sender As Object, e As EventArgs) Handles DTDOB.ValueChanged
    ' once the user has selected a value, change the format so that a date will be displayed
    DTDOB.CustomFormat = "MM/dd/yy"
End Sub

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
    If DTDOB.CustomFormat = " " Then
        MessageBox.Show("Enter the date")
    Else
        ' ... do something with the Value() property ...
        Debug.Print(DTDOB.Value.ToString)
    End If
End Sub
  

Комментарии:

1. Спасибо, сэр. Могу ли я хранить дату в строковом типе данных вместо типа данных Date?

2. Вы можете, но зачем вам это делать?

Ответ №4:

  If  DateTimePicker1.Value.Date = Date.Today  Then
     MessageBox.Show("Choose Date From DateTimePicker !")
 Else
     ' Your code
 end if
  

У меня это работает, по умолчанию DateTimePicker значением является дата сегодняшнего дня.

Я новичок в программировании, у меня не так много знаний, но это то, что я пробовал, и у меня это работает.

Ответ №5:

Упростил и не заботился о метке, это было просто для отображения значений:

     Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            DTDOB.CustomFormat = " " 'An empty SPACE DTDOB.Format = DateTimePickerFormat.Custom

            DTDOB.Tag = DTDOB.Value   'Label displays the actual Value

            Label1.Text = DTDOB.Tag
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If DTDOB.Value = DTDOB.Tag Then
                MessageBox.Show("Enter the Date")
            Else
                MessageBox.Show("Date Saved")
            End If
        End Sub
    End Class
  

Комментарии:

1. За исключением того, что выбранная ими дата не будет отображаться в DateTimePicker, поскольку формат по-прежнему » » … смотрите мой ответ.

Ответ №6:

Ваш код работает, но он более эффективен, чем этот.

 Dim Input As String = DTDOB.Value.ToString()

Dim dateTime2 As DateTime

If DateTime.TryParse(Input, dateTime2) Then
    Console.WriteLine(dateTime2)
Else
    Console.WriteLine("Invalid")
End If
  

Комментарии:

1. Это настолько менее эффективно, что даже не смешно. Из-за проблем с культурой / интернационализацией и часовым поясом преобразование значений DateTime в / из строк происходит невероятно медленно .