Hallo!
Du lieferst Infos tröpfchenweise.
Für die Ermittlung von Zeitvergleichen ist das timespan-Objekt
geeignet. Für Zeiteingaben kann man den DateTimePicker oder
eine eventuell eine Maskedtextbox nutzen.
Vielleicht so ... ???
Public Class frmWerkTage2
Dim lblEingang As New Label With _
{.Parent = Me, .Width = 200, .Text = "Abfrageeingang: "}
Dim WithEvents dtpEingangsDatum As New DateTimePicker With _
{.Parent = Me, .Top = 40, .Width = 200, .Value = CDate(Now)}
Dim WithEvents dtpEingangsUhrzeit As New DateTimePicker With _
{.Parent = Me, .Top = 80, _
.Width = 200, .Format = DateTimePickerFormat.Time}
Dim lblDauer As New Label With _
{.Parent = Me, .Width = 100, .Left = 350, .Top = 40, _
.Text = "Projekt-Dauer: "}
Dim WithEvents txtDauer As New TextBox With _
{.Parent = Me, .Width = 100, .Left = 450, .Top = 40, _
.Text = "3"}
Dim lblSchlußzeit As New Label With _
{.Parent = Me, .Width = 100, .Left = 350, _
.Text = "Redaktionsschluß: "}
Dim WithEvents txtSchlußzeit As New MaskedTextBox With _
{.Parent = Me, .Width = 100, .Left = 450, .Mask = "00:00", _
.Text = "1000"}
'Berechnungsbutton
Dim WithEvents btnCompute As New Button With _
{.Parent = Me, .Top = 120, _
.Width = 200, .Text = "Berechne Datum Projektende"}
'Anzeige des Ergebnisses
Dim lblWerktage As New Label With _
{.Parent = Me, .Top = 120, .Left = 350, _
.Width = 300, .Text = "", .BackColor = Color.LightGray}
Private Sub btnCompute_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnCompute.Click
Dim dt As Date = DateValue(dtpEingangsDatum.Value.ToString)
Dim dauer As Integer
If Not Integer.TryParse(txtDauer.Text, dauer) OrElse dauer < 1 Then
MsgBox("Fehlerhafte Angabe zur Projektdauer (mind. 1 Tag)")
Exit Sub
End If
'Eingabe: tägliche Schlußzeit prüfen und in Timespan wandeln
Dim schlußzeit As TimeSpan
If Not TimeSpan.TryParse(txtSchlußzeit.Text, schlußzeit) Then
MsgBox("Fehlerhafte Zeit-Eingabe (Schlußzeit)")
Exit Sub
End If
'eingegebene Eingangszeit in Timespan wandeln
Dim ts As New TimeSpan((dtpEingangsUhrzeit.Value.TimeOfDay).Ticks)
'Eingangszeit der Anfrage mit täglichem Redaktionsschluß vergleichen
If schlußzeit.Ticks < ts.Ticks Then
' Eingangszeit liegt später als Schlußzeit:
' Projekt startet am Folgetag
dt = dt.AddDays(1)
End If
Dim c As Integer
Do
Dim wochentag As Integer = Microsoft.VisualBasic.Weekday(dt)
'Unter Annahme: 1 = Sonntag, 7 = Samstag
If wochentag > 1 And wochentag < 7 Then
c += 1
End If
dt = dt.AddDays(1)
Loop While c < dauer
'Annahme: Datum letzter Projekttag = Datum Projektende
dt = dt.AddDays(-1)
lblWerktage.Text = "Projektende: " & dt.ToLongDateString
End Sub
Private Sub dtp_ValueChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles dtpEingangsDatum.ValueChanged, _
dtpEingangsUhrzeit.ValueChanged, _
txtSchlußzeit.TextChanged, _
txtDauer.TextChanged
lblWerktage.Text = ""
End Sub
Private Sub frmWerkTage2_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Width = 600
End Sub
End Class |