VB时间输入,更好的方法吗?

时间:2010-05-02 14:15:33

标签: vb.net validation optimization datetime input

为我的老板工作做一个方便的计划,作为学期之间的夏季项目,既可以让她的生活更轻松,也可以练习和提高我的技能。意图是让她能够快速,轻松地计算出工作时间和分钟。表单本身有一系列文本框,用于本周每天的时钟输入和时钟输出时间。目前它试图将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 个答案:

答案 0 :(得分:2)

不要使用TextBox作为时间输入,而是使用DateTimePicker,只需将Format属性更改为Time

处理Validating的{​​{1}}事件,如果设置为DateTimePicker,则无效,这样他们就无法保存更改,除非它有效。或者,如果您希望他们能够离开e.Cancel = False并只更改颜色,请改为处理DateTimePicker事件。

关于你的代码示例,我没有真正看过它的逻辑,但是没有相同的代码21次,只需将代码移动到一个单独的函数中,然后调用该函数的开始和结束时间为参数,它可以返回工作时间作为返回值。

我不确定你的用户界面是什么样的,但如果你多次重复开始时间和结束时间输入控制,那么可能值得考虑创建你自己的用户控件,每个用户控件可以包含一个开始和结束时间控件,然后您可以将验证放在该用户控件中,这样您就不必拥有大量的事件处理程序等。