2010-05-02 2 views
1

Работа над удобной программой для моего босса на работе в качестве летнего проекта между семестрами как для облегчения жизни для нее, так и для практики и улучшения моих навыков. Цель состоит в том, чтобы позволить ей быстро и легко вычислить часы и минуты работы человека. В самой форме есть серия текстовых полей для часов и часов для каждого дня на этой неделе. В настоящее время он пытается преобразовать текст txtbox в переменную Date, затем .Subtract() начинается с конца и сохраняет его в скользящей общей переменной, которая отображается в нижней части формы. Я не могу не думать, что есть лучший способ сделать это, и я абсолютно уверен, что наличие ниже кода кода 21 раз (7 дней, 3 смены) неэффективно.VB время ввода, лучший способ сделать это?

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 указывает на недопустимый ввод.

Любые яркие идеи?

ответ

2

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

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

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

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