VB ввод времени, лучший способ сделать это? - PullRequest
1 голос
/ 02 мая 2010

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

2 голосов
/ 02 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...