Jedes Selektierte Datum aus MonthCalender, wie?

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    VB.NET-Quellcode

    1. Me.MonthCalendar1.SelectionRange.Start
    2. Me.MonthCalendar1.SelectionRange.End
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Damit kann ich ausrechnen wieviele Tage dazwischen liegen anhand:

    VB.NET-Quellcode

    1. Dim tage As Integer = DateDiff(DateInterval.Day, urlaub_cal.SelectionRange.Start, urlaub_cal.SelectionRange.End)


    Aber wie kann ich für jeden Tag der in "tage" liegt , das komplette Datum anzeigen?

    Ich häng grad irgendwie...
    Pseudo:

    Datum ist gleich Startdatum.

    Mache folgendes:
    Datum Ausgeben
    Datum um einen Tag erweitern (AddDays oder so)
    Bis Datum den Enddatum erreicht hat.

    Verstanden?
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Oder so:

    VB.NET-Quellcode

    1. Dim start As DateTime = Me.MonthCalendar1.SelectionRange.Start
    2. Dim ende As DateTime = Me.MonthCalendar1.SelectionRange.End
    3. MessageBox.Show((ende - start).TotalDays.ToString())
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Verstanden habe ich nun wie ich es am besten löse!
    Nur habe ich da ein Problem, bzw. ich bin mir nicht sicher ob mein Weg der beste ist.

    VB.NET-Quellcode

    1. Dim tage As Integer = DateDiff(DateInterval.Day, urlaub_cal.SelectionRange.Start, urlaub_cal.SelectionRange.End)
    2. Dim start As String = Me.urlaub_cal.SelectionRange.Start.ToString
    3. Dim ende As String = Me.urlaub_cal.SelectionRange.End.ToString
    4. Dim Split() = start.Split(".")
    5. Dim Tag As String = Split(0)
    6. Dim Monat As String = Split(1)
    7. Dim Jahr As String = Split(2)
    8. MessageBox.Show(start.ToString)
    9. For i = 0 To tage
    10. Dim datum As String
    11. datum = (Tag + 1) & "." & Monat & "." & Jahr
    12. MessageBox.Show(datum)
    13. Next



    //EDIT:

    Das ist die Lösung, damit funktionierts. Nur ob es der optimalste Weg ist, weiß ich nicht!

    VB.NET-Quellcode

    1. Dim tage As Integer = DateDiff(DateInterval.Day, urlaub_cal.SelectionRange.Start, urlaub_cal.SelectionRange.End)
    2. Dim start As String = Me.urlaub_cal.SelectionRange.Start.ToString
    3. Dim ende As String = Me.urlaub_cal.SelectionRange.End.ToString
    4. Dim Split() = start.Split(".")
    5. Dim Tag As String = Split(0)
    6. Dim Monat As String = Split(1)
    7. Dim Jahr As String = Split(2)
    8. For i = 0 To tage
    9. Dim datum As String
    10. datum = (Tag + i) & "." & Monat & "." & Jahr
    11. MessageBox.Show(datum)
    12. Next

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim dStart As Date = Me.MonthCalendar1.SelectionStart
    3. Dim dEnd As Date = Me.MonthCalendar1.SelectionEnd
    4. Dim days As Integer = (dEnd - dStart).Days
    5. For i As Integer = 0 To days
    6. MessageBox.Show(dStart.AddDays(i).ToShortDateString())
    7. Next
    8. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TiTo schrieb:

    Nur ob es der optimalste Weg ist,
    Nein, der richtige ist optimaler. :thumbsup:

    milaim schrieb:

    er will jedes Datum "Komplett" anzeigen.
    Da musser halt mal bei DateTime den ObjectBrowser bemühen. Wir sind hier schließlich im Hauptforum und zeigen Wege, nicht Lösungen. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was natürlich auch elegant ist, vor Allem, wenn man so eine Funktion öfter braucht:

    Man erstelle sich eine eigene Klasse und lässt diese von MonthCalendar erben und baut eben diese Funktionalität ein. Hat alles, was ein Calendar kann + das:

    VB.NET-Quellcode

    1. Public Class BetterCalendar : Inherits MonthCalendar
    2. Public Function GetDateRange() As List(Of Date)
    3. Dim dStart As Date = MyBase.SelectionStart
    4. Dim dEnd As Date = MyBase.SelectionEnd
    5. Dim list As New List(Of Date)
    6. For i As Integer = 0 To (dEnd - dStart).Days
    7. list.Add(dStart.AddDays(i))
    8. Next
    9. Return list
    10. End Function
    11. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o