TimePicker Implemetieren

  • WPF

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    TimePicker Implemetieren

    Hallo,

    kann mir jemand erklären, wie man einen TimePicker in WPF einbindet? Also im C# Code.
    Ich habe mir da jetzt das WPF Toolkit installiert.. Bzw. hinzugefügt!
    Mit Freundlichen Grüßen
    AtomiX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AtomiX“ ()

    Hallo

    Hat der Link von @Akanel nun deine Frage beantwortet? Ist ja genau das was du brauchst. Aber von dir kahm nicht wirklich eine aussagekräftige Antwort und der Thread ist auch nicht als erledigt markiert.
    Bitte um klarstellung.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich habe jetzt nochmal ein bisschen rumgeschaut.. Eine offene Frage für mich ist jetzt noch, wie ich das Anzeige Format hinbekomme, sodass nur die Uhrzeit mit Minuten angezeigt wird.
    Mit Freundlichen Grüßen
    AtomiX
    Hallo

    Das musst du denke ich genauer erläutern. Das ist doch eh das Default Anzeigeformat des Controls von Xceed.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja vom Prinzip ist es wirklich das default Anzeigeformat. Allerdings wird da das komplette Datum auch mit Wochentag davor gestellt.

    Aber Ziel sollte vom Anzeigeformat her sein, wie auf der Seite: codedocu.de/Details_Mobile?d=2…ente-oder-DateTime-Picker... Aber der Code dort hat mir da nicht weitergeholfen.
    Bilder
    • 4789c182bb39d283da1c86c55245c61b.png

      11,62 kB, 293×240, 59 mal angesehen
    Mit Freundlichen Grüßen
    AtomiX
    Zeig doch mal bitte auch deinen Code.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    C#-Quellcode

    1. public MainWindow()
    2. {
    3. InitializeComponent();
    4. }
    5. private void Window_Loaded(object sender, RoutedEventArgs e)
    6. {
    7. //dtp_Dienstbeginn.Text.ToString("hh: mm");
    8. }
    9. private void Btn_check_Click(object sender, RoutedEventArgs e)
    10. {
    11. DateTime time = new DateTime();
    12. double offDuty = double.Parse(dtp_Dienstbeginn.Text);
    13. double onDuty = double.Parse(dtp_Dienstschluss.Text);
    14. double pause = double.Parse(dtp_pause.Text);
    15. double workedHours = 0;
    16. if (onDuty > offDuty)
    17. {
    18. workedHours = onDuty - offDuty - pause;
    19. }
    20. else if (offDuty > onDuty)
    21. {
    22. workedHours = offDuty - onDuty - pause;
    23. }
    24. else
    25. {
    26. //MessageBox.Show("Kontrollstruktur ist im else Block!");
    27. }
    28. lst_Ausgabe.Items.Add("Du hast insgesamt " + workedHours + " Stunden gearbeitet!");
    29. }
    Mit Freundlichen Grüßen
    AtomiX
    Sorry, habe ich mich wohl nicht richtig ausgedrückt. Ich meinte den XAML Code. Es geht dir doch um die Anzeige der Uhrzeit oder?
    Oder geht es dir wie du diese als Daten bekommt. BTW: dtp_Dienstschluss.Text ist ne schlechte Idee. Warum holst du nicht die Datenim richtigen Format mittels Value.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Okay. Wie soll ich das denn mittels Value machen?
    Einfach

    Quellcode

    1. dtp_Dienstbeginn.Value = "hh: mm";
    ?

    XML-Quellcode

    1. <StackPanel Orientation="Vertical">
    2. <StackPanel Orientation="Horizontal" Margin="20,30,0,0">
    3. <Label Background="#FF9C9C9C" Content="Dienstbeginn:" FontWeight="Bold" Margin="0 0 5 0"/>
    4. <xctk:DateTimePicker x:Name="dtp_Dienstbeginn" VerticalContentAlignment="Center" Background="#FF475466" Width="160"/>
    5. </StackPanel>
    6. <StackPanel Orientation="Horizontal" Margin="20, 20, 0, 17">
    7. <Label Background="#FF9C9C9C" Content="Dienstschluss:" FontWeight="Bold" Margin="0 0 5 0"/>
    8. <xctk:DateTimePicker x:Name="dtp_Dienstschluss" VerticalContentAlignment="Center" Background="#FF475466" Width="160"/>
    9. </StackPanel>
    10. <RadioButton x:Name="radio_pause" Background="#FF9C9C9C" Margin="20,0,0,0" Content="Mit Pause"></RadioButton>
    11. <StackPanel Orientation="Horizontal" Margin="20,8,0,0">
    12. <Label Background="#FF9C9C9C" Content="Pause: " FontWeight="Bold" Margin="0 0 5 0"/>
    13. <xctk:DateTimePicker x:Name="dtp_pause" VerticalContentAlignment="Center" Background="#FF475466" Width="160"/>
    14. </StackPanel>
    15. <Button Margin="79,20,80,0" Content="Überprüfen" Click="Btn_check_Click"></Button>
    16. <ListBox x:Name="lst_Ausgabe" Background="#FF475466" Margin="20" Height="108"/>
    17. </StackPanel>
    Mit Freundlichen Grüßen
    AtomiX
    Hallo

    OK, da haben wir den Fehler. Wenn du nur die Zeit haben möchtest nimmt das passende control von XCeed wie im verlinkten Beispiel.
    dort wurde nämlich der TimePicker gennommen anstatt dem von dir verwendetem DateTimePicker.

    AtomiX schrieb:

    Wie soll ich das denn mittels Value machen?

    Arbeite immer mit den richtigen Datentypen. Warum einen String versuchen zu verarbeiten wenn das Control dir ein im Property Value ein Nullable Of DateTime liefert.

    Was machst du wenn jemand der deine App verwendet das Amerikanische Datums/Zeitformat verwendet? Da kommst du nie auf einen grünen Zweig. verwende die Datentypen immer für das wofür sie da sind. Nur ein tipp.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Stimmt, dass hätte mir auffallen müssen, dass ich den TimePicker verwenden sollte.

    Nofear23m schrieb:

    Arbeite immer mit den richtigen Datentypen. Warum einen String versuchen zu verarbeiten wenn das Control dir ein im Property Value ein Nullable Of DateTime liefert.

    Das versteh ich versteh ich jetzt nicht so richtig wie du das meinst. D.h. es wird bspw. kein int, double oder sonstiges als Datentyp geliefert, sondern ein "Value" ? Versteh ich das richtig? Gibt es da auch Literatur dazu?
    Also was für einen Datentyp müsste ich da verwenden? Auf jedenfall nicht double..

    UPDATE
    Noch eine Sache, wie läuft das dann im Code-Behind ab? Muss man da auch nochmal das WPF Toolkit in irgendeiner Art und Weise in die using-Direktive initliasieren?
    Mit Freundlichen Grüßen
    AtomiX

    AtomiX schrieb:

    D.h. es wird bspw. kein int, double oder sonstiges als Datentyp geliefert, sondern ein "Value"

    Nein. Das Property hat nur den Namen "Value" und liefert ein Nullable Of DateTime. Also DateTime als Datentyp. aber eben Nullable.
    Schau mal hier.

    AtomiX schrieb:

    Muss man da auch nochmal das WPF Toolkit in irgendeiner Art und Weise in die using-Direktive initliasieren?

    Denke ich nicht. Aber probier es einfach aus. Die IDE würde es dir eh vorschlagen wenn dem so ist. (Glühbirne)

    Mit dem Datentyp den du im Property "Value" bekommst - als DateTime kannst du viel einfacher arbeiten. Wenn ich mir deinen Code von oben ansehe kann dieser nun wie folgt abgekürzt werden:

    C#-Quellcode

    1. private void Btn_check_Click(object sender, RoutedEventArgs e)
    2. {
    3. DateTime time = dtp_Dienstbeginn.Value.Value;
    4. }
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich habe das jetzt so hier gemacht.. Ich habe es jetzt probiert in einen double zu casten, aber das funktioniert nicht..

    Mein Problem ist eher zurzeit, dass ich nicht weiß, wie ich mit dem Value Property die Daten abfangen kann, wie es sonst immer mit strings, ints usw war.


    C#-Quellcode

    1. private void Btn_check_Click(object sender, RoutedEventArgs e)
    2. {
    3. DateTime time = dtp_Dienstbeginn.Value.Value;
    4. var offDuty = dtp_Dienstbeginn.Value.Value;
    5. var onDuty = dtp_Dienstschluss.Value.Value;
    6. var pause = dtp_pause.Value.Value;
    7. double workedHours = 0;
    8. if (onDuty > offDuty)
    9. {
    10. workedHours = (double)onDuty - offDuty - pause;
    11. }
    12. else if (offDuty > onDuty)
    13. {
    14. workedHours = (double)offDuty - onDuty - pause;
    15. }
    16. else
    17. {
    18. MessageBox.Show("Kontrollstruktur ist im else Block!");
    19. }
    20. lst_Ausgabe.Items.Add("Du hast insgesamt " + workedHours + " Stunden gearbeitet!");
    21. }



    Oder müsste ich da jetzt erstmal alles so hier abfragen?
    Also nach dem Prinzip:

    C#-Quellcode

    1. ​int? a = 42;
    2. if (a is int valueOfA)
    3. {
    4. Console.WriteLine($"a is {valueOfA}");
    5. }
    6. else
    7. {
    8. Console.WriteLine("a does not have a value");
    9. }
    Mit Freundlichen Grüßen
    AtomiX
    What??

    Du willst zum einen einfach die selektierten Zeiten haben richtig?
    Und dann noch wieviele Stunden arbeit das ergibt.

    Hier code aus dem Kopf:

    C#-Quellcode

    1. DateTime starttime = dtp_Dienstbeginn.Value.Value;
    2. DateTime endtime = dtp_Dienstschluss.Value.Value;
    3. double workTime = ((TimeSpan)(endtime - starttime)).TotalHours;
    4. lst_Ausgabe.Items.Add("Du hast insgesamt " + workTime + " Stunden gearbeitet!");


    fertig.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja genauso mein ich das. Jetzt habe ich das auch mit der Value Property einigermaßen gecheckt.

    Die Frage, die ich mir jetzt Stelle ist, was genau TimeSpan auf sich hat. Heißt das, dass TimeSpan den Zeitabstand berechnet? Und wie könnte man da jetzt bspw. nur 2 Ziffern nach dem Komma angeben?
    Mit Freundlichen Grüßen
    AtomiX
    Hallo

    TimeSpan = Zeitspanne

    Aber das bekommst du selbst auch raus oder? Schau hier.

    AtomiX schrieb:

    Und wie könnte man da jetzt bspw. nur 2 Ziffern nach dem Komma angeben?

    Welches Komma? Wo ist ein Komma? Bitte verwechsle jetzt nicht wieder Datentypen. Ich empfehle dir wirklich folgenden Artikel mal zu lernen. Mit lernen meine ich nicht durchlesen sondern wirkich verinnerlichen und verstehen.
    docs.microsoft.com/en-us/dotne…sharp/types-and-variables

    Du wirst dir gerade unter WPF echt schwer tun ohne den Grundlagenkenntnissen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ah, ok. Miss zugeben das ich daran garnicht gedacht habe.

    Wobei ich dir noch den Tipp gebe das du sowieso mit Minuten rechnen solltest.

    Bei Arbeitszeiten Rechnen pbrigens fast alle Systeme und Programme mit Zeiteinheiten.
    Da hat eine Stunde 100 Zeiteinheiten. Je nachdem was genau zu vorhast zu programmieren.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##