DateTimePicker

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Dieter__.

    DateTimePicker

    Guten Morgen,

    Ich hab folgendes Problem.
    Bei einem DateTimePicker hab ich ein Customer Format gemacht, bei dem ich eine Zeit eingeben kann.
    Wenn ich nun eine Zeit eingebe und sie dann im Code zur weiterverarbeitung herauslesen will mit der Eigenschaft Value, bekomme ich nur die aktuelle Uhrzeit.
    Wie kann ich auf die eingegebene Zeit zugreifen und nicht auf die Aktuelle Uhrzeit ?

    Gruß,
    Dieter__
    Hast Du bitte mal ein Stück Code zum Nachvollziehen?
    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!
    Sorry, total vergessen.

    Hier der Funktionsaufruf:

    VB.NET-Quellcode

    1. WriteTime(ExcelSheet, frm_SetDatum.DTP_uhr_von.Value, frm_SetDatum.DTP_uhr_bis.Value, 1, "C")


    Und hier zu Funktion selber:

    VB.NET-Quellcode

    1. #Region " Write Time "
    2. Private Sub WriteTime(ByVal _WorkSheet As Object, ByVal _zeit_von As String, ByVal _zeit_bis As String, ByVal _row As Integer, ByVal _column As String)
    3. _WorkSheet.Cells(_row, _column) = "Training von " & Mid(_zeit_von, 12, 5) & " Uhr bis " & Mid(_zeit_bis, 12, 5) & " Uhr"
    4. End Sub
    5. #End Region


    Es soll dann bei Eingabe z.B. das hier drin stehen:
    Training von 16:15 Uhr bis 17:15 Uhr
    Welches Format hast Du dem DTP gegeben?
    Ich finde nix, wie man eine Zeit und gleichzeitig das Datum vorgeben kann.
    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!
    Setze mal bitte
    Option Explicit = On
    Option Strict = On

    Bei mir tut er es mit Deinen Formatvorgaben.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. WriteTime(Nothing, DTP_uhr_von.Value.ToString, DTP_uhr_bis.Value.ToString, 1, "C")
    3. End Sub
    4. Private Sub WriteTime(ByVal _WorkSheet As Object, ByVal _zeit_von As String, ByVal _zeit_bis As String, ByVal _row As Integer, ByVal _column As String)
    5. '_WorkSheet.Cells(_row, _column) = "Training von " & Mid(_zeit_von, 12, 5) & " Uhr bis " & Mid(_zeit_bis, 12, 5) & " Uhr"
    6. Label1.Text = "Training von " & Mid(_zeit_von, 12, 5) & " Uhr bis " & Mid(_zeit_bis, 12, 5) & " Uhr"
    7. End Sub

    Du kannst natürlich auch schreiben:

    VB.NET-Quellcode

    1. WriteTime(Nothing, DTP_uhr_von.Value.ToShortTimeString, DTP_uhr_bis.Value.ToShortTimeString, 1, "C")
    2. '...
    3. Label1.Text = "Training von " & _zeit_von & " Uhr bis " & _zeit_bis & " Uhr"
    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!
    Projektmappenexplorer
    Projekt -> Eigenschaften
    -> Tab Kompilieren

    die gelten dann für das ganze Projekt.
    Diese Einstellungen solltest Du immer für alle Deine Projekte wählen.
    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!
    Kann ich nicht machen weil ich sonst meine Später Bindung nicht mehr funktioniert.

    Kann es mit dem zusammenhängen, dass ich mit einer eigenen Code Klasse auf die Werte zugreifen will und nicht mit der Klasse der Form selber ?
    Aber ich denke das dürfte kein Unterschied machen.

    Was bringen diese Eigenschaften, da sie mir nicht bekannt sind.
    Späte Bindung - das ist so ein eigen Ding. Historisch und so.
    Diese Eigenschaften sorgen dafür, dass die Entwicklungsumgebung gleich bei der Codeeingabe Deinen Quelltext analysiert und Dich bei Fehlern anmeckert. Das wäre ein Minimum für einen anständigen Programmierstil.
    Folgerung: Späte Bindung ist out.

    Eigentlich sollte das keinen Unterschied machen, von wo aus Du zugreifst.

    Funktioniert nun Deine Zeit?
    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!
    Doch. Wenn ich die Frühe Bindung benutze, kann ich das Programm nur auf der Excel Version ausführen auf die auf meinem PC ist, mit dem ich Programmier.
    Ich hatte das Problem, dass ich das Programm dann nur auf Excel 2007 ausführen konnte. Auf Excel 2003 ging es nicht.
    Aus dem Grund hab ich auf die Späte Bindung zurückgegriffen, mit der es dann letztendlich auch problemlos funktioniert hat.

    Nein geht leider immer noch nicht. Habe beide Tipps von dir versucht, haben aber beide nicht funktioniert.
    Excel, genau, das ist so ein Ding. Hier ggf. eine Klasse pro Excel-Ver sion anlegen.
    Leg Dir mal ein kleines Testprojekt an, so wie ich hier auch.
    Füge 2 DTP mit den Eigenschaften hinzu, einen Button und ein Label, dann müsste es so funktionieren wie bei mir. Und dann kannst Du die Unterschiede zwischen beiden Projekten suchen.
    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!
    Vielleicht solltest Du von Ferne nicht die Werte auslesen, sondern eine ferne Prozedur aufrufen, die Dir die Werte übergibt:

    VB.NET-Quellcode

    1. Dim t1 as string = frm_SetDatum.GetTime1()
    2. Dim t2 as string = frm_SetDatum.GetTime2()
    3. WriteTime(ExcelSheet, t1, t2, 1, "C")
    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!
    Also ich hab mein Fehler gefunden.

    Es lag an einer Fehlerhaften Deklaration, was mir erst später aufgefallen ist da diese ein weinig versteckt war. Deshalb hat das Programm einfach die Werte in die Excel Tabelle geschrieben, die bei dem Programmstart drin standen und da diese sich nach der Uhr richteten stand immer die aktuelle Uhrzeit drin.

    Ich hab jetzt die fehlerhafte Deklaration ausgebessert und siehe da es funktioniert alles problemlos.

    Vielen Dank für deine Mühe.

    Kann zu.