Работа над удобной программой для моего босса на работе как летний проект промежуточные семестры и чтобы сделать жизнь легче для нее, и практиковать и улучшить мои навыки. Намерение состоит в том, чтобы позволить ей быстро и легко вычислить часы и минуты, человек работал. Сама форма имеет серию текстовых полей в течение времени Часов и Времени ухода в течение каждого дня на той неделе. В настоящее время это пытается преобразовать txtbox текст в переменную Даты, затем.Subtract () запуск от конца и хранит его в прокручивающейся общей переменной, которая отображена у основания формы. Я не могу не думать, что существует лучший способ идти о выполнении этого, и я абсолютно уверен, что наличие ниже времен блока кода 21 (7 дней, 3 сдвига) неэффективно.
Dim StartTime As Date
Dim EndTime As Date
Dim Worked As System.TimeSpan
Dim WorkedTotal As System.TimeSpan
If chkFirst.Checked = True Then
StartTime = CDate(txtMonStart.Text)
EndTime = CDate(txtMonEnd.Text)
EndTime = EndTime.AddHours(12)
Worked = EndTime.Subtract(StartTime)
lblMonWork.Text = Worked.ToString()
WorkedTotal += Worked
В настоящее время это работает, главным образом. Пользователь должен войти ":" во входе времени, и если общее количество превышает 24 часа, оно отображает дневной столбец (40-часовые 12 минимальных дисплеев рабочей недели как 1.16:12). Я хотел бы устранить обе из этих незапланированных функций и позволить, чтобы мой контроль ввода произошел, когда фокус изменяется на другое поле. Изменение bgcolor указало бы на недопустимый вход.
Какие-либо прекрасные идеи?
Вместо использования TextBox
для ввода времени используйте DateTimePicker
, просто измените свойство Format
на Time
.
Обработайте событие Validating
от DateTimePicker
и если оно недействительно, просто установите e.Cancel = False
, таким образом, они не смогут сохранить изменения, пока они не будут действительны. Или, если вы хотите, чтобы они могли оставить DateTimePicker
и просто изменить цвет, просто обработайте событие ValueChanged
вместо этого.
Что касается вашего примера кода, я не очень вникал в его логику, но вместо того, чтобы повторять один и тот же код 21 раз, просто перенесите его в отдельную функцию, а затем вызовите эту функцию с начальным и конечным временем в качестве параметров, и она может вернуть отработанное время в качестве возвращаемого значения.
Я не уверен, как выглядит ваш пользовательский интерфейс, но если вы повторяете элементы управления вводом начального и конечного времени несколько раз, возможно, стоит рассмотреть возможность создания собственного пользовательского элемента управления, который может содержать по одному элементу управления начальным и конечным временем, а затем вы можете сделать проверку внутри этого элемента управления, чтобы не иметь много обработчиков событий и т.д.