Vb.net VB时间输入,有更好的方法吗?

Vb.net VB时间输入,有更好的方法吗?,vb.net,validation,optimization,datetime,input,Vb.net,Validation,Optimization,Datetime,Input,在学期之间为我的老板在工作中制定一个方便的计划,作为一个暑期项目,既让她的生活更轻松,又练习和提高我的技能。其目的是让她能够快速、轻松地计算员工的工作时间和分钟数。表单本身有一系列文本框,用于输入和输出该周每天的时间。当前,它尝试将txtbox文本转换为日期变量,然后.Subtract()从结尾开始,并将其存储在滚动总计变量中,该变量显示在表单底部。我忍不住认为有更好的方法来做这件事,而且我绝对肯定,让下面的代码块重复21次(7天,3次轮班)是没有效率的 Dim StartTime As

在学期之间为我的老板在工作中制定一个方便的计划,作为一个暑期项目,既让她的生活更轻松,又练习和提高我的技能。其目的是让她能够快速、轻松地计算员工的工作时间和分钟数。表单本身有一系列文本框,用于输入和输出该周每天的时间。当前,它尝试将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表示输入无效


有什么好主意吗?

不要使用
文本框
作为时间输入,使用
日期时间选择器
,只需将
格式
属性更改为
时间

处理
DateTimePicker
Validating
事件,如果该事件无效,只需设置
e.Cancel=False
,这样他们就无法保存更改,除非更改有效。或者,如果您希望他们能够离开
DateTimePicker
并只更改颜色,只需处理
ValueChanged
事件即可

关于您的代码示例,我并没有真正研究它的逻辑,而是将代码移到一个单独的函数中,然后以开始时间和结束时间作为参数调用该函数,它可以将workedtime作为返回值返回,而不是21次使用相同的代码

我不确定您的UI是什么样子的,但是如果您多次重复开始时间和结束时间输入控件,那么创建您自己的usercontrol(可以包含一个开始时间和结束时间控件)可能是值得的,然后,您可以将验证放在用户控件中,这样就不必有很多事件处理程序等