Binär Uhr mit möglichst wenig Code

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Binär Uhr mit möglichst wenig Code

    VB.NET-Quellcode

    1. ' NORMALE UHR + BINÄRUHR
    2. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    3. Dim jetzt As Date = Date.Now
    4. Dim stunde As Integer = jetzt.Hour
    5. Dim minute As Integer = jetzt.Minute
    6. Dim sekunde As Integer = jetzt.Second
    7. Dim stundeBinaer As String = Convert.ToString(stunde, 2)
    8. Dim minuteBinaer As String = Convert.ToString(minute, 2)
    9. Dim sekundeBinaer As String = Convert.ToString(sekunde, 2)
    10. TextBox2.Text = "Uhr : " & stunde & " : " & minute & " : " & sekunde
    11. TextBox3.Text = "Binäruhr : " & stundeBinaer & " : " & minuteBinaer & " : " & sekundeBinaer
    12. End Sub


    Also nach dem splitten der Zeit brauche ich ca 17 if Abfragen !

    Geht das noch kürtzer ?

    LG Andre.......
    Sieh Dir mal die Formatierungsmöglichkeiten von DataTime an, z.B.:

    VB.NET-Quellcode

    1. Dim jetzt As Date = Date.Now
    2. txt = jetzt.ToLongTimeString
    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!
    RodFromGermany: ja schau ich mier mal an, mal sehn was sich finded.
    brauche nämlich die secunden als 01 und nicht als 1

    So in etwar hätte ich gedacht :

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. 'Stunden/Minuten/Secunden
    4. Dim Stunden1 As String, Stunden2 As String, Stunden3 As String, Stunden4 As String, Stunden5 As String
    5. Dim Minuten1 As String, Minuten2 As String, Minuten3 As String, Minuten4 As String, Minuten5 As String, Minuten6 As String
    6. Dim Secunden1 As String, Secunden2 As String, Secunden3 As String, Secunden4 As String, Secunden5 As String, Secunden6 As String
    7. 'Timer
    8. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    9. 'Stunden binär und fertig zerlegt
    10. Stunden1 = Convert.ToString(Date.Now.Hour, 2)(0)
    11. Stunden2 = Convert.ToString(Date.Now.Hour, 2)(1)
    12. Stunden3 = Convert.ToString(Date.Now.Hour, 2)(2)
    13. Stunden4 = Convert.ToString(Date.Now.Hour, 2)(3)
    14. Stunden5 = Convert.ToString(Date.Now.Hour, 2)(4)
    15. 'Minuten binär und fertig zerlegt
    16. Minuten1 = Convert.ToString(Date.Now.Minute, 2)(0)
    17. Minuten2 = Convert.ToString(Date.Now.Minute, 2)(1)
    18. Minuten3 = Convert.ToString(Date.Now.Minute, 2)(2)
    19. Minuten4 = Convert.ToString(Date.Now.Minute, 2)(3) 'Wie regel ich das am besten dass ich hier wen null ,,nicht rausfalle ?!
    20. Minuten5 = Convert.ToString(Date.Now.Minute, 2)(4)
    21. Minuten6 = Convert.ToString(Date.Now.Minute, 2)(5)
    22. 'Secunden binär und fertig zerlegt
    23. Secunden1 = Convert.ToString(Date.Now.Second, 2)(0)
    24. Secunden2 = Convert.ToString(Date.Now.Second, 2)(1)
    25. Secunden3 = Convert.ToString(Date.Now.Second, 2)(2)
    26. Secunden4 = Convert.ToString(Date.Now.Second, 2)(3)
    27. Secunden5 = Convert.ToString(Date.Now.Second, 2)(4)
    28. Secunden6 = Convert.ToString(Date.Now.Second, 2)(5)
    29. End Sub


    Und dann über if Abfrage an Pictureboxen :?: :!:

    LG Andre......
    Ok dann anders -dann lesen wir halt die ganze zeit und sagen wenn stelle x = 1 = dann passende stelle an !

    Damit sollte es passender werden......... :whistling:

    binär zeit = Convert.ToString(Date.Now.Hour, 2) & " : " & Convert.ToString(Date.Now.Minute, 2)& " : " & Convert.ToString(Date.Now.Second, 2)

    und dann stellen direkt abfragen und umsetzen :whistling:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TVX“ ()

    Hi, die Zahl 1 wird binär natürlich viel kürzer dargestellt als z.b. 123. Du musst vor der Zahl also mit ausreichend Nullen auffüllen, z.B. so:

    VB.NET-Quellcode

    1. Dim sekundenZahl As Integer = ...
    2. Dim sekundenString As String = Convert.ToString(sekundenZahl, 2).ToString.PadLeft(8, "0"c)'8 ist die Soll-Länge
    jo habs gesehn mim integer

    und das wenn ich ne stelle abfrage die nicht da ist es knallt ist auch klar

    was du mier da hinterlassen hast schau ich mir jetz mal an

    an sonst währe ich jetz so vorgegangen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim Uhr As String
    4. 'Timer
    5. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    6. Uhr = Convert.ToString(Date.Now.Hour, 2) & ":" & Convert.ToString(Date.Now.Minute, 2) & ":" & Convert.ToString(Date.Now.Second, 2)
    7. If Uhr(1) = "1" Then
    8. PictureBox1.BackColor = Color.Red
    9. Else
    10. If Not Uhr(1) = "1" Then
    11. PictureBox1.BackColor = Color.Cyan
    12. Else
    13. If Uhr(2) = "1" Then
    14. PictureBox2.BackColor = Color.Red
    15. Else
    16. If Not Uhr(2) = "1" Then
    17. PictureBox2.BackColor = Color.Cyan
    18. End If
    19. End If
    20. End If
    21. End If
    22. End Sub
    23. End Class


    Ich mus wirklich meine voreile ohne nachzudenken sein lassen :wacko:

    Ja das mit den nullen kam mir auch in den Sinn fand ich aber nicht so schön (.ToString("00") ) oder über Formatierung :whistling:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TVX“ ()

    Ok Das mit der Uhrzeit hatte ich mir auch schon angesehen hatte es aber so noch nie benutzt !

    Und das mit dem 00000 anhängen ginge zwar und ist auch gut ,,, aber mal sehn was noch geht

    das Problem ist frage ich stelle 8 ab und sie ist nicht da zb: zeit(8) und der existiert gerade nicht wie kann ich da nen fehler vermeiden ohne zu catchen

    Gibts ne Möglichkeit zu prüfen ob zeit(8) da ist befor ich es abfrage ,,,,oder so ?


    Ok so geht es schon mal !


    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. 'Stunden/Minuten/Secunden
    4. 'Timer
    5. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    6. 'Stunden binär und fertig zerlegt
    7. Dim stunden1 = Convert.ToString(Date.Now.Hour, 2).ToString.PadLeft(1, CChar("0"))(0)
    8. Dim stunden2 = Convert.ToString(Date.Now.Hour, 2).ToString.PadLeft(2, CChar("0"))(1)
    9. Dim stunden3 = Convert.ToString(Date.Now.Hour, 2).ToString.PadLeft(3, CChar("0"))(2)
    10. Dim stunden4 = Convert.ToString(Date.Now.Hour, 2).ToString.PadLeft(4, CChar("0"))(3)
    11. Dim stunden5 = Convert.ToString(Date.Now.Hour, 2).ToString.PadLeft(5, CChar("0"))(4)
    12. 'Minuten binär und fertig zerlegt
    13. Dim minuten1 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(1, CChar("0"))(0)
    14. Dim minuten2 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(2, CChar("0"))(1)
    15. Dim minuten3 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(3, CChar("0"))(2)
    16. Dim minuten4 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(4, CChar("0"))(3)
    17. Dim minuten5 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(5, CChar("0"))(4)
    18. Dim minuten6 As String = Convert.ToString(Date.Now.Minute, 2).ToString.PadLeft(6, CChar("0"))(5)
    19. 'Secunden binär und fertig zerlegt
    20. Dim sekunden1 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(1, CChar("0"))(0)
    21. Dim sekunden2 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(2, CChar("0"))(1)
    22. Dim sekunden3 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(3, CChar("0"))(2)
    23. Dim sekunden4 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(4, CChar("0"))(3)
    24. Dim sekunden5 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(5, CChar("0"))(4)
    25. Dim sekunden6 As String = Convert.ToString(Date.Now.Second, 2).ToString.PadLeft(6, CChar("0"))(5)

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

    String.Length muss entsprechend sein, spiel damit mal etwas rum. Ansonsten war das mit den 0'en vorne dran hängen genau dafür gedacht.

    Die If-Blöcke schreibe aber besser untereinander, da sparst du dir das Else und es lässt sich besser lesen.

    Allerdings ist das immernoch die Holzhammermethode^^ Ich würde ja komplett mit GDI+ arbeiten, das würde mir das Control-gebastel ersparen. Ist vllt eine Nummer zuviel für den Anfang, aber schau dir das mal an:

    VB.NET-Quellcode

    1. Dim zahl As Integer = CInt(NumericUpDown1.Value)
    2. Dim binärString As String = Convert.ToString(zahl, 2).ToString.PadLeft(6, "0"c)
    3. Dim boxen() As CheckBox = New CheckBox() {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6}
    4. Dim werte() As Char = binärString.ToCharArray
    5. For i = 0 To 6 - 1
    6. Dim cb As CheckBox = boxen(i)
    7. Dim wert As Char = werte(i)
    8. If wert = "1"c Then
    9. cb.Checked = True
    10. Else
    11. cb.Checked = False
    12. End If
    13. Next




    Sollte sich direkt auf dein Problem übertragen lassen.
    lg von einem Mit-Saarländer^^

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

    TVX schrieb:

    will mier so die 000 nicht ganz nehmen !
    Meinst Du so was:

    VB.NET-Quellcode

    1. MessageBox.Show(String.Format("{0:00000000}", 5))
    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!
    Guten Morgen miteinander - Heute frei !

    Und ja das mit der For schleife find ich echt gut

    Und ja RodFromGermany ich meinte sowas nur so wie ich es oben verwendete nahm er die nullen nicht

    hatte es in Textbox und Ausgangszahl 1 versucht

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

    Ich hab letztens auch mal eine Binär Uhr gebastelt.

    Für die anzeige hab ich Radiobuttons verwendet.

    Codemäßig hab ich das so gelöst:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Stunden(ByVal stunde As String)
    2. Select Case stunde.Length
    3. Case 4
    4. rbH8.Checked = (stunde.Substring(0, 1) = "1")
    5. rbH4.Checked = (stunde.Substring(1, 1) = "1")
    6. rbH2.Checked = (stunde.Substring(2, 1) = "1")
    7. rbH1.Checked = (stunde.Substring(3, 1) = "1")
    8. Case 3
    9. rbH8.Checked = False
    10. rbH4.Checked = (stunde.Substring(0, 1) = "1")
    11. rbH2.Checked = (stunde.Substring(1, 1) = "1")
    12. rbH1.Checked = (stunde.Substring(2, 1) = "1")
    13. Case 2
    14. rbH8.Checked = False
    15. rbH4.Checked = False
    16. rbH2.Checked = (stunde.Substring(0, 1) = "1")
    17. rbH1.Checked = (stunde.Substring(1, 1) = "1")
    18. Case 1
    19. rbH8.Checked = False
    20. rbH4.Checked = False
    21. rbH2.Checked = False
    22. rbH1.Checked = (stunde.Substring(0, 1) = "1")
    23. End Select
    24. End Sub

    VB.NET-Quellcode

    1. Sub Minuten(ByVal Minute As String)
    2. Select Case Minute.Length
    3. Case 6
    4. rbM32.Checked = (Minute.Substring(0, 1) = "1")
    5. rbM16.Checked = (Minute.Substring(1, 1) = "1")
    6. rbM8.Checked = (Minute.Substring(2, 1) = "1")
    7. rbM4.Checked = (Minute.Substring(3, 1) = "1")
    8. rbM2.Checked = (Minute.Substring(4, 1) = "1")
    9. rbM1.Checked = (Minute.Substring(5, 1) = "1")
    10. Case 5
    11. rbM32.Checked = False
    12. rbM16.Checked = (Minute.Substring(0, 1) = "1")
    13. rbM8.Checked = (Minute.Substring(1, 1) = "1")
    14. rbM4.Checked = (Minute.Substring(2, 1) = "1")
    15. rbM2.Checked = (Minute.Substring(3, 1) = "1")
    16. rbM1.Checked = (Minute.Substring(4, 1) = "1")
    17. Case 4
    18. rbM32.Checked = False
    19. rbM16.Checked = False
    20. rbM8.Checked = (Minute.Substring(0, 1) = "1")
    21. rbM4.Checked = (Minute.Substring(1, 1) = "1")
    22. rbM2.Checked = (Minute.Substring(2, 1) = "1")
    23. rbM1.Checked = (Minute.Substring(3, 1) = "1")
    24. Case 3
    25. rbM32.Checked = False
    26. rbM16.Checked = False
    27. rbM8.Checked = False
    28. rbM4.Checked = (Minute.Substring(0, 1) = "1")
    29. rbM2.Checked = (Minute.Substring(1, 1) = "1")
    30. rbM1.Checked = (Minute.Substring(2, 1) = "1")
    31. Case 2
    32. rbM32.Checked = False
    33. rbM16.Checked = False
    34. rbM8.Checked = False
    35. rbM4.Checked = False
    36. rbM2.Checked = (Minute.Substring(0, 1) = "1")
    37. rbM1.Checked = (Minute.Substring(1, 1) = "1")
    38. Case 1
    39. rbM32.Checked = False
    40. rbM16.Checked = False
    41. rbM8.Checked = False
    42. rbM4.Checked = False
    43. rbM2.Checked = False
    44. rbM1.Checked = (Minute.Substring(0, 1) = "1")
    45. End Select
    46. End Sub

    VB.NET-Quellcode

    1. Private Sub Tick(sender As System.Object, e As System.EventArgs) Handles tmr.Tick
    2. Me.Text = "Secunde: " & Convert.ToString(CInt(Format(Date.Now, "ss")), 2)
    3. Stunden(Convert.ToString(CInt(Format(Date.Now, "h tt")), 2))
    4. Minuten(Convert.ToString(CInt(Format(Date.Now, "mm")), 2))
    5. End Sub
    Bilder
    • Uhr.PNG

      4,41 kB, 221×98, 963 mal angesehen
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ja das ist auch gut !


    Ich hab jetz mal die sekunden gemacht zb

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. Dim Uhr = DateTime.Now.ToLongTimeString
    3. Dim zahl As Integer = CInt(Uhr(6) & Uhr(7))
    4. Dim binärString As String = Convert.ToString(zahl, 2).ToString.PadLeft(6, "0"c)
    5. Dim boxen() As CheckBox = New CheckBox() {CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6}
    6. Dim werte() As Char = binärString.ToCharArray
    7. For i = 0 To 6 - 1
    8. Dim cb As CheckBox = boxen(i)
    9. Dim wert As Char = werte(i)
    10. If wert = "1"c Then
    11. cb.Checked = True
    12. Else
    13. cb.Checked = False
    14. End If
    15. Next
    16. End Sub
    Aus

    TVX schrieb:

    VB.NET-Quellcode

    1. For i = 0 To 6 - 1
    2. Dim cb As CheckBox = boxen(i)
    3. Dim wert As Char = werte(i)
    4. If wert = "1"c Then
    5. cb.Checked = True
    6. Else
    7. cb.Checked = False
    8. End If
    9. Next
    machst Du:

    VB.NET-Quellcode

    1. For i = 0 To 5
    2. boxen(i).Checked = werte(i) = "1"c
    3. Next
    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!
    Ja, da kann man optimieren/verkürzen aber da würde ich definitiv eine Klammer setzen, weil kosten ja nix und machen lesbarer (imo) xD

    [vb]boxen(i).Checked = (werte(i) = "1"c)/vb]

    @PN von TVB
    Sollte ja nur ein Beispiel sein, was du daraus machst ist deine Sache^^ VS2010 reicht mir momentan - aber demnächst werde ich mir das neue mal anschauen..
    Das ist ne super Sache,kann ich aber nicht für Label Farben nehmen !

    SO SIEHT ES MOMENTAN AUS !

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    4. 'Uhr
    5. Dim Uhr = DateTime.Now.ToLongTimeString
    6. 'stunden
    7. Dim stunden As Integer = CInt(Uhr(0) & Uhr(1))
    8. Dim binärString As String = Convert.ToString(stunden, 2).ToString.PadLeft(5, CChar("0"))
    9. Dim boxen() As Label = New Label() {Label2, Label3, Label4, Label5, Label6}
    10. Dim werte() As Char = binärString.ToCharArray
    11. For i = 0 To 5 - 1
    12. If werte(i) = "1" Then
    13. boxen(i).BackColor = Color.Cyan
    14. Else
    15. boxen(i).BackColor = Color.Silver
    16. End If
    17. Next
    18. 'minuten
    19. Dim minuten As Integer = CInt(Uhr(3) & Uhr(4))
    20. Dim binärString1 As String = Convert.ToString(minuten, 2).ToString.PadLeft(6, CChar("0"))
    21. Dim boxen1() As Label = New Label() {Label7, Label8, Label9, Label10, Label11, Label12}
    22. Dim werte1() As Char = binärString1.ToCharArray
    23. For i = 0 To 6 - 1
    24. If werte1(i) = "1" Then
    25. boxen1(i).BackColor = Color.Cyan
    26. Else
    27. boxen1(i).BackColor = Color.Silver
    28. End If
    29. Next
    30. 'secunden
    31. Dim sekunden As Integer = CInt(Uhr(6) & Uhr(7))
    32. Dim binärString2 As String = Convert.ToString(sekunden, 2).ToString.PadLeft(6, CChar("0"))
    33. Dim boxen2() As Label = New Label() {Label13, Label14, Label15, Label16, Label17, Label18}
    34. Dim werte2() As Char = binärString2.ToCharArray
    35. For i = 0 To 6 - 1
    36. If werte2(i) = "1" Then
    37. boxen2(i).BackColor = Color.Cyan
    38. Else
    39. boxen2(i).BackColor = Color.Silver
    40. End If
    41. Next
    42. End Sub


    boxen(i).BackColor ???

    Weil vom Ausehen her sind checkboxen ein no go ;(

    Also nahm ich Label !

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „TVX“ ()