我的代码如下:
Private Sub tbRcvrDepartTime_textchanged(sender As Object, e As EventArgs) Handles tbRcvrDepartTime.TextChanged
'Converts the 90 Receiver Arrival & Departures Date & Times to a string for comparison
Dim raTime As String = tbRcvrArriveTime.Text 'Takes the Time only String and converts to string
Dim raDate As String = dpRcvrArriveDate.Text 'Takes the DateTimePicker and converts date to string
Dim raDateString = String.Concat(raDate, " ", raTime) 'Puts together the Date & Time into one continuous string
'Dim raDateFormat As String = "MM-dd-yyyy HH:mm" 'Sets the String to Date style Format
Dim raResultDate As Date = CDate(raDateString) 'Finalizes the String for use in below comparison
Dim rdTime As String = tbRcvrDepartTime.Text 'Takes the Time only String and converts to string
Dim rdDate As String = dpRcvrDepartDate.Text 'Takes the DateTimePicker and converts date to string
Dim rdDateString = String.Concat(rdDate, " ", rdTime) 'Puts together the Date & Time into one continuous string
'Dim rdDateFormat As String = "MM-dd-yyyy HH:mm" 'Sets the String to Date Format
Dim rdResultDate As Date = CDate(rdDateString) 'Finalizes the String for use in below comparison
'Checks to see if 2 or more hours have elapsed since Receiver Arrival/Departure Date & Time
Dim elapsedR As TimeSpan = rdResultDate.Subtract(raResultDate)
tbRcvrDepartTime.BackColor = If(elapsedR.TotalMinutes > 120, Color.LightPink, Color.White)
End Sub
raTime& rdTime是单独的文本框。 raDate和amp; rdDate是datetimepickers。
当我运行代码&#34; live&#34;最初,我看到的第一条记录是正确显示的。一旦我移动到另一个记录,这就会消失...我得到随机结果,如果> 120分钟过去,它将不会将背景颜色更改为正确的颜色。其他时候,当经过<120分钟时,它会改变背景颜色。有时候背景颜色应该没有变化,否则它会改变颜色。我尝试使用TotalHours最初这样做,但遇到了相同的结果。它是随机的,并不一致。我已经为此工作了2天,但结果没有差异。我的想法是需要一种方法来刷新&#34; rdResultDate&amp;加载每个新记录时的raResultDate信息,但我无法用我的代码知识做到这一点。
代码必须能够考虑是否存在新日期 - 即raDate:11/01/2016和raTime:23:46 rdDate:11/02/2016和rdTime:03:00 - 这将超过2小时(或120分钟),应该阅读&#34; True&#34;并且在超过2小时(或120分钟)时更改背景颜色。
但如果以下情况属实:
raDate:11/01/2016和raTime:23:46和
rdDate:11/02/2016和rdTime:01:00这不会超过2小时(或120分钟),应阅读&#34; False&#34;并且不会改变背景颜色。
答案 0 :(得分:0)
所有这些代码:
Dim Detention90 As String
Try
If elapsedR.TotalMinutes > 120 Then
Detention90 = "True"
Else
Detention90 = "False"
End If
Select Case Detention90.ToString
Case = "True" : tbRcvrDepartTime.BackColor = Color.LightPink
Case Else : tbRcvrDepartTime.BackColor = Color.White
End Select
Catch ex As Exception
'If a problem occurs, show Error message box
MessageBox.Show("Receiver Arrive Time & Depart Time Elapsed error" & vbCrLf & "Lines 1424-1434")
End Try
简化为:
Dim elapsedR As TimeSpan = rdResultDate.Subtract(raResultDate)
tbRcvrDepartTime.BackColor = If(elapsedR.TotalMinutes > 120, Color.LightPink, Color.White)
不确定它是否会直接解决您的问题,但对于评论来说有点太多了,我发现以这种方式压缩代码通常对于追踪困难的错误非常有用。
但在这种情况下,我怀疑主要问题是解析日期时间值...您并不总是解析您希望从给定输入字符串中的DateTime值。具体来说,您有格式字符串变量raDateFormat
和rdDateFormat
,但随后调用Date.Parse()
以便这些格式变量从不使用,您将受到怜悯无论您的线程,进程或系统的默认日期格式是什么。如果你的系统使用英国的d / m / y订单而不是美式m / d / y,你最终会得到一些奇怪的结果。您可能需要DateTime.ParseExact()
。