Вход времени VB, лучший способ сделать это?

Работа над удобной программой для моего босса на работе как летний проект промежуточные семестры и чтобы сделать жизнь легче для нее, и практиковать и улучшить мои навыки. Намерение состоит в том, чтобы позволить ей быстро и легко вычислить часы и минуты, человек работал. Сама форма имеет серию текстовых полей в течение времени Часов и Времени ухода в течение каждого дня на той неделе. В настоящее время это пытается преобразовать 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 указало бы на недопустимый вход.

Какие-либо прекрасные идеи?

1
задан Syliddar 2 May 2010 в 14:15
поделиться

1 ответ

Вместо использования TextBox для ввода времени используйте DateTimePicker, просто измените свойство Format на Time.

Обработайте событие Validating от DateTimePicker и если оно недействительно, просто установите e.Cancel = False, таким образом, они не смогут сохранить изменения, пока они не будут действительны. Или, если вы хотите, чтобы они могли оставить DateTimePicker и просто изменить цвет, просто обработайте событие ValueChanged вместо этого.

Что касается вашего примера кода, я не очень вникал в его логику, но вместо того, чтобы повторять один и тот же код 21 раз, просто перенесите его в отдельную функцию, а затем вызовите эту функцию с начальным и конечным временем в качестве параметров, и она может вернуть отработанное время в качестве возвращаемого значения.

Я не уверен, как выглядит ваш пользовательский интерфейс, но если вы повторяете элементы управления вводом начального и конечного времени несколько раз, возможно, стоит рассмотреть возможность создания собственного пользовательского элемента управления, который может содержать по одному элементу управления начальным и конечным временем, а затем вы можете сделать проверку внутри этого элемента управления, чтобы не иметь много обработчиков событий и т.д.

2
ответ дан 3 September 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: