#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 в / из строк происходит невероятно медленно .