为我的老板工作做一个方便的计划,作为学期之间的夏季项目,既可以让她的生活更轻松,也可以练习和提高我的技能。意图是让她能够快速,轻松地计算出工作时间和分钟。表单本身有一系列文本框,用于本周每天的时钟输入和时钟输出时间。目前它试图将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将指示无效输入。
有什么好主意吗?
答案 0 :(得分:2)
不要使用TextBox
作为时间输入,而是使用DateTimePicker
,只需将Format
属性更改为Time
。
处理Validating
的{{1}}事件,如果设置为DateTimePicker
,则无效,这样他们就无法保存更改,除非它有效。或者,如果您希望他们能够离开e.Cancel = False
并只更改颜色,请改为处理DateTimePicker
事件。
关于你的代码示例,我没有真正看过它的逻辑,但是没有相同的代码21次,只需将代码移动到一个单独的函数中,然后调用该函数的开始和结束时间为参数,它可以返回工作时间作为返回值。
我不确定你的用户界面是什么样的,但如果你多次重复开始时间和结束时间输入控制,那么可能值得考虑创建你自己的用户控件,每个用户控件可以包含一个开始和结束时间控件,然后您可以将验证放在该用户控件中,这样您就不必拥有大量的事件处理程序等。