Die Verknüpfung mit AND war schon richtig.
Du musst nur berücksichtigen, dass Zeiten auch am nächsten Tag liegen können, also nach Mitternacht. Dabei muss auch Unterschieden werden, ob eine Einschaltzeit oder Ausschaltzeit eingegeben wurde. Denn nur Ausschaltzeiten können nach Mitternacht liegen.
Wenn Ausschaltzeit < Einschaltzeit dann 1 Tag dazu addieren.
Habe ein funktionierendes Beispiel gemacht.
Dazu habe ich 10 Textboxen auf der Form und habe den Textboxen in der Tag-Eigenschaft eine Nummer zugewiesen, 0 bis 4 für die Einschaltzeiten und 5 bis 9 für die Ausschaltzeiten.
Habe in meinem Beispiel einen 0-basierenden Index verwendet.
Dim Schaltzeit(4, 1) As TimeSpan
Private Sub TextBoxen_Validated(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles TextBox1.Validated, TextBox9.Validated, _
TextBox8.Validated, TextBox7.Validated, TextBox6.Validated, _
TextBox5.Validated, TextBox4.Validated, TextBox3.Validated, _
TextBox2.Validated, TextBox10.Validated
Dim tb = DirectCast(sender, TextBox)
Dim Zeit As TimeSpan
If TimeSpan.TryParse(tb.Text, Zeit) Then
Dim nr = CInt(tb.Tag)
If nr < 5 Then 'Einschaltzeiten
Schaltzeit(nr, 0) = Zeit
If ZeitBereichTest(nr, 0) Then
tb.Clear()
Schaltzeit(nr, 0) = Nothing
End If
Else 'Ausschaltzeiten
Schaltzeit(nr - 5, 1) = Zeit
If ZeitBereichTest(nr - 5, 1) Then
tb.Clear()
Schaltzeit(nr - 5, 1) = Nothing
End If
End If
ElseIf tb.TextLength > 0 Then
MsgBox("Ungültige Eingabe!")
End If
End Sub
''' <summary>
''' Testet die eingegebene Zeit auf Überschneidungen.
''' </summary>
''' <param name="Index1">Der Index der TextBox (Tag).</param>
''' <returns>True wenn Fehler.</returns>
''' <remarks></remarks>
Private Function ZeitBereichTest(ByVal Index1 As Integer, ByVal Index2 As _
Integer) As Boolean
Dim Ein, Aus, TestZeit As TimeSpan
'=======================================================
TestZeit = Schaltzeit(Index1, Index2) 'Eingegebene Zeit
If Index2 = 1 Then 'Ist Ausschaltzeit
'-----------------------------------------------------
' Prüfen ob Ausschaltzeit im nächsten Tag liegt.
Ein = Schaltzeit(Index1, 0) 'Einschaltzeit
If TestZeit < Ein Then TestZeit = TestZeit.Add(New TimeSpan(1, 0, 0, 0))
'-----------------------------------------------------
End If
'=======================================================
For i = 0 To 4
If i = Index1 Then Continue For
'-----------------------------------------------------
Ein = Schaltzeit(i, 0) 'Einschaltzeit
Aus = Schaltzeit(i, 1) 'Ausschaltzeit
'-----------------------------------------------------
' Prüfen ob Ausschaltzeit im nächsten Tag liegt.
If Aus < Ein Then Aus = Aus.Add(New TimeSpan(1, 0, 0, 0))
'-----------------------------------------------------
' Prüfen ob eine TestZeit in einem vergebenen Bereich liegt
If TestZeit > Ein And TestZeit < Aus Then
Dim Meldung = _
"Die Eingabe überschneidet sich mit" & vbCrLf & _
"dem Zeitbereich: " & (i + 1).ToString
MsgBox(Meldung, MsgBoxStyle.Exclamation, "Zeitüberschneidung")
Return True
End If
Next
End Function Habe VB 2008
Gruß |