Position in String abfragen

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Position in String abfragen

    Hallo zusammen,

    ich habe einen String den ich mit einer If-Abfrage anschaue.
    Die Abfrage sieht in etwa so aus:

    VB.NET-Quellcode

    1. If String(1) = "" OR "0" then
    2. CheckBox1.checked = true
    3. else
    4. CheckBox1.checked = false
    5. end if


    Die Zuweisung der Strings läuft so:

    VB.NET-Quellcode

    1. If IntWert > 0 Then
    2. 'IntWert kann z.B. 54 sein
    3. While i > 0
    4. BinString = String.Concat("1".ToString, BinString)
    5. i = Math.Truncate(i / 2)
    6. End While
    7. Else
    8. BinString = String.Concat("0".ToString, BinString)
    9. End If


    String.Concat und "0".ToString sind bereits meine Versuche das Problem zu lösen.

    An Stelle 2 des Strings steht ganz sicher eine 0, der Compiler übergeht diese aber, weil der Eintrag "0"c lautet. Er interpretiert diesen also als Character.
    Wie kann ich entweder die Abfrage auf Char ummünzen, oder die 0 in String umwandeln?

    Meine Recherchen haben mich bereits ganz oft zu MSDN (grauenvoll) und natürlich auch Google, bevorzugt dieses Forum, geführt. Ich bin aber immer noch nicht voran gekommen.


    Habt Dank!
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne
    Ich werfe noch den Thread von @ErfinderDesRades in den Raum: Boolean-Vergleiche mit True sind überflüssig.
    Der ergibt

    VB.NET-Quellcode

    1. CheckBox1.Checked = (DeineStringVariable(1) = "" OrElse DeineStringVariable(1) = "0"c)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich bin immer noch an meinem Binäruhr-Projekt dran, aber weil man hier ja immer direkt geächtet wird, wenn man alte Threads wiederbelebt, habe ich halt einen neuen eröffnet.

    Der Vorschlag von HenryV hat schon Wirkung gezeigt, danke dafür :thumbsup:

    Optimieren kann man hier sicherlich einiges, ich bin allerdings noch fortgeschrittener Anfänger (weshalb ich die MSDNA Suchergebnisse auch nicht leiden kann). Verbesserungsvorschläge also gerne mit einer Erklärung, warum dies besser ist.
    Aktuell gestalte ich die Anzeige noch mit Radiobuttons, welche ich mit .checked = true/false anspreche, um die Uhr darzustellen.

    Hier also der ganze Code:

    VB.NET-Quellcode

    1. Imports System.ComponentModel.DataAnnotations
    2. Imports System.DirectoryServices.ActiveDirectory
    3. Public Class Form1
    4. 'Public IntStunde As Integer
    5. 'Public IntMinute As Integer
    6. 'Public IntSekunde As Integer
    7. Public StundeZMaxBin() As String = {"0", "0"}
    8. Public StundeZBin As String
    9. Public StundeEMaxBin() As String = {"0", "0", "0", "0"}
    10. Public StundeEBin As String
    11. Public MinuteZMaxBin() As String = {"0", "0", "0"}
    12. Public MinuteZBin As String
    13. Public MinuteEMaxBin() As String = {"0", "0", "0", "0"}
    14. Public MinuteEBin As String
    15. Public SekundeZMaxBin() As String = {"0", "0", "0"}
    16. Public SekundeZBin As String
    17. Public SekundeEMaxBin() As String = {"0", "0", "0", "0"}
    18. Public SekundeEBin As String
    19. Public BinString As String
    20. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    21. Presets()
    22. Timer1.Interval = 500
    23. Timer1.Start()
    24. End Sub
    25. Private Sub Presets()
    26. Label1.Text = ""
    27. Label2.Text = ""
    28. Label3.Text = ""
    29. rb_H_Z1.Text = ""
    30. rb_H_Z1.Checked = False
    31. rb_H_Z2.Text = ""
    32. rb_H_Z2.Checked = False
    33. rb_H_E1.Text = ""
    34. rb_H_E1.Checked = False
    35. rb_H_E2.Text = ""
    36. rb_H_E2.Checked = False
    37. rb_H_E4.Text = ""
    38. rb_H_E4.Checked = False
    39. rb_H_E8.Text = ""
    40. rb_H_E8.Checked = False
    41. rb_M_Z1.Text = ""
    42. rb_M_Z1.Checked = False
    43. rb_M_Z2.Text = ""
    44. rb_M_Z2.Checked = False
    45. rb_M_Z4.Text = ""
    46. rb_M_Z4.Checked = False
    47. rb_M_E1.Text = ""
    48. rb_M_E1.Checked = False
    49. rb_M_E2.Text = ""
    50. rb_M_E2.Checked = False
    51. rb_M_E4.Text = ""
    52. rb_M_E4.Checked = False
    53. rb_M_E8.Text = ""
    54. rb_M_E8.Checked = False
    55. rb_S_Z1.Text = ""
    56. rb_S_Z1.Checked = False
    57. rb_S_Z2.Text = ""
    58. rb_S_Z2.Checked = False
    59. rb_S_Z4.Text = ""
    60. rb_S_Z4.Checked = False
    61. rb_S_E1.Text = ""
    62. rb_S_E1.Checked = False
    63. rb_S_E2.Text = ""
    64. rb_S_E2.Checked = False
    65. rb_S_E4.Text = ""
    66. rb_S_E4.Checked = False
    67. rb_S_E8.Text = ""
    68. rb_S_E8.Checked = False
    69. End Sub
    70. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    71. Dim Time As String = CStr(DateAndTime.TimeOfDay)
    72. 'Time(11+12) --> Stunde
    73. 'Time(14+15) --> Minute
    74. 'Time(17+18) --> Sekunde
    75. Label1.Text = DateAndTime.TimeOfDay
    76. Umrechner(Val(Time(0)), 2)
    77. StundeZBin = BinString.ToString
    78. Umrechner(Val(Time(1)), 4)
    79. StundeEBin = BinString.ToString
    80. Umrechner(Val(Time(3)), 3)
    81. MinuteZBin = BinString.ToString
    82. Umrechner(Val(Time(4)), 4)
    83. MinuteEBin = BinString.ToString
    84. Umrechner(Val(Time(6)), 3)
    85. SekundeZBin = BinString.ToString
    86. Umrechner(Val(Time(7)), 4)
    87. SekundeEBin = BinString.ToString
    88. 'Errechnete Binärwärte in die Radiobuttons übertragen
    89. Setzen()
    90. End Sub
    91. Private Sub Setzen()
    92. 'Stunden Zehner
    93. If StundeZBin(0) = "" Or StundeZBin(0) = "0" Then
    94. rb_H_Z1.Checked = False
    95. Else
    96. rb_H_Z1.Checked = True
    97. End If
    98. If StundeZBin(1) = "" Or StundeZBin(1) = "0" Then
    99. rb_H_Z2.Checked = False
    100. Else
    101. rb_H_Z2.Checked = True
    102. End If
    103. 'Stunden Einer
    104. If StundeEBin(0) = "" Or StundeEBin(0) = "0" Then
    105. rb_H_E1.Checked = False
    106. Else
    107. rb_H_E1.Checked = True
    108. End If
    109. If StundeEBin(1) = "" Or StundeEBin(1) = "0" Then
    110. rb_H_E2.Checked = False
    111. Else
    112. rb_H_E2.Checked = True
    113. End If
    114. If StundeEBin(2) = "" Or StundeEBin(2) = "0" Then
    115. rb_H_E4.Checked = False
    116. Else
    117. rb_H_E4.Checked = True
    118. End If
    119. If StundeEBin(3) = "" Or StundeEBin(3) = "0" Then
    120. rb_H_E8.Checked = False
    121. Else
    122. rb_H_E8.Checked = True
    123. End If
    124. 'Minuten Zehner
    125. If MinuteZBin(0) = "" Or MinuteZBin(0) = "0" Then
    126. rb_M_Z1.Checked = False
    127. Else
    128. rb_M_Z1.Checked = True
    129. End If
    130. If MinuteZBin(1) = "" Or MinuteZBin(1) = "0" Then
    131. rb_M_Z2.Checked = False
    132. Else
    133. rb_M_Z2.Checked = True
    134. End If
    135. If MinuteZBin(2) = "" Or MinuteZBin(2) = "0" Then
    136. rb_M_Z4.Checked = False
    137. Else
    138. rb_M_Z4.Checked = True
    139. End If
    140. 'Minuten Einer
    141. If MinuteEBin(0) = "" Or MinuteEBin(0) = "0" Then
    142. rb_M_E1.Checked = False
    143. Else
    144. rb_M_E1.Checked = True
    145. End If
    146. If MinuteEBin(1) = "" Or MinuteEBin(1) = "0" Then
    147. rb_M_E2.Checked = False
    148. Else
    149. rb_M_E2.Checked = True
    150. End If
    151. If MinuteEBin(2) = "" Or MinuteEBin(2) = "0" Then
    152. rb_M_E4.Checked = False
    153. Else
    154. rb_M_E4.Checked = True
    155. End If
    156. If MinuteEBin(3) = "" Or MinuteEBin(3) = "0" Then
    157. rb_M_E8.Checked = False
    158. Else
    159. rb_M_E8.Checked = True
    160. End If
    161. 'Sekunden Zehner
    162. If SekundeZBin(0) = "" Or SekundeZBin(0) = "0" Then
    163. rb_S_Z1.Checked = False
    164. Else
    165. rb_S_Z1.Checked = True
    166. End If
    167. If SekundeZBin(1) = "" Or SekundeZBin(1) = "0" Then
    168. rb_S_Z2.Checked = False
    169. Else
    170. rb_S_Z2.Checked = True
    171. End If
    172. If SekundeZBin(2) = "" Or SekundeZBin(2) = "0" Then
    173. rb_S_Z4.Checked = False
    174. Else
    175. rb_S_Z4.Checked = True
    176. End If
    177. 'Sekunden Einer
    178. If SekundeEBin(0) = "" Or SekundeEBin(0) = "0" Then
    179. rb_S_E1.Checked = False
    180. Else
    181. rb_S_E1.Checked = True
    182. End If
    183. If SekundeEBin(1) = "" Or SekundeEBin(1) = "0" Then
    184. rb_S_E2.Checked = False
    185. Else
    186. rb_S_E2.Checked = True
    187. End If
    188. If SekundeEBin(2) = "" Or SekundeEBin(2) = "0" Then
    189. rb_S_E4.Checked = False
    190. Else
    191. rb_S_E4.Checked = True
    192. End If
    193. If SekundeEBin(3) = "" Or SekundeEBin(3) = "0" Then
    194. rb_S_E8.Checked = False
    195. Else
    196. rb_S_E8.Checked = True
    197. End If
    198. End Sub
    199. Private Sub Umrechner(Wert, Stellen)
    200. 'Max Werte
    201. 'StundenZ = 0-2
    202. 'StundenE = 0-9
    203. 'MinutenZ = 0-5
    204. 'MinutenE = 0-9
    205. 'SekundenZ = 0-5
    206. 'SekundenE = 0-9
    207. Dim IntWert As Integer = Val(Wert)
    208. Dim i As Integer = IntWert
    209. Dim Rest As Integer = 0
    210. BinString = ""
    211. If IntWert > 0 Then
    212. While i > 0
    213. BinString = String.Concat("1".ToString, BinString)
    214. i = Math.Truncate(i / 2)
    215. End While
    216. Else
    217. BinString = String.Concat("0".ToString, BinString)
    218. End If
    219. 'Fehlende Stellen auffüllen
    220. Rest = Stellen - BinString.Length
    221. While Rest > 0
    222. BinString = String.Concat("0".ToString, BinString)
    223. Rest = Stellen - BinString.Length
    224. End While
    225. 'BinString = BinString.ToString
    226. End Sub
    227. End Class
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne
    Augenbluten ;(
    Sieh Dir bitte nochmal kurz Post#5 an …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, habe ich schon gesehen und das werde ich die Tage mal angehen :)

    Mich wundert allerdings, wieso die Radiobuttons nicht das tun, was sie sollen. Es flackern immer nur 2 (Minuten und Sekunden Zehner, jeweils der Höchste).
    Entweder ich habe ein Flip-Flop gebaut, oder ich hab einen Bug. Ich schätze eher Zweiteres.

    Wie gesagt, ich schaue mir die bisherigen Vorschläge noch an :)
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne
    RadioButtons interagieren untereinander, wenn sie im selben Container liegen: setzt man den einen auf True, dann setzt ein anderer sich auf False.
    Dieses Verhalten führt gerne zu überraschenden Überaschungen, insbesondere wenn man ihren Status per Code steuern möchte.

    Ah - grad gesehen: Man kann die Radiobutton.AutoCheck-property auf False setzen - vielleicht macht das das Verhalten bei dir vorhersagbarer.



    Vereinfachungs-Vorschlag:

    VB.NET-Quellcode

    1. 'statt
    2. If SekundeEBin(3) = "" Or SekundeEBin(3) = "0" Then
    3. rb_S_E8.Checked = False
    4. Else
    5. rb_S_E8.Checked = True
    6. End If
    7. 'mach
    8. rb_S_E8.Checked = Not (SekundeEBin(3) = "" OrElse SekundeEBin(3) = "0")
    die anderen Stellen entsprechend.
    Begründung: Weniger Code ist in mehrfacher Hinsicht besser als viel Code , der dasselbe macht.
    (Diese Verbesserung ergibt sich übrigens auch aus dem in post #5 verlinkten Tutorial)
    Habs nur kurz überflogen.
    Warum Strings ?
    Mit DateTime und Integer, wäre es doch einfacher und auch "richtiger".
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Das habe ich versucht und es wäre mir auch lieber gewesen, DateAndTime gibt mir aber leider kein reines Integer aus, da die Formatierung ja Doppelpunkte beinhaltet.
    Deswegen nehme ich was da kommt und zerlege es bzw. wandle es in das um, was ich brauche.

    Wenn es da einen schöneren Weg gibt, bin ich da auch gerne dabei :)

    Vielen Dank @ErfinderDesRades ! Ich werde es mir ansehen und sehr wahrscheinlich auch übernehmen. Deine Hilfe war bisher immer sehr zuverlässig ^^

    Gibt es eigentlich einen Weg meine Preset Block zu verkürzen? Also kann ich die vielen RadioButtons irgendwie Durch-Loopen oder so? Jeden einzeln ansprechen ist dezent anstrengend und führt natürlich auch Flüchtigkeitsfehlern...
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne

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

    Ryke schrieb:

    DateAndTime gibt mir aber leider kein reines Integer aus
    Du musst vom DateTime-Wert natürlich den Parameter abfragen, den Du benötigst, z.B. DateTime.Second.
    Du musst nur mal in die Dokumentation rein schauen:
    learn.microsoft.com/de-de/dotn…tem.datetime?view=net-7.0
    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!
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Danke für den Hinweis! Ich habe mich vertan :S
    Ich bin hier auf Strings gegangen, weil ich die Stunden/Minuten/Sekunden in Zehner und Einer zerlege. Wenn ich mit DateTime.Second arbeite, bekomme ich zwar die Sekunden, kann diese aber nicht so zerlegen wie ich das wollte. Wenn es hier einen schöneren Weg gibt, lerne ich diesen sehr gerne :)
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne

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

    Zur Kompaktierung der Presets-Methode:

    VB.NET-Quellcode

    1. Private Sub Presets()
    2. Label1.Text = ""
    3. Label2.Text = ""
    4. Label3.Text = ""
    5. Dim RadioButtons = {rb_H_Z1, rb_H_Z2, rb_H_E1, rb_H_E2, rb_H_E4, rb_H_E8, rb_M_Z1, rb_M_Z2, rb_M_Z4, rb_M_E1, rb_M_E2, rb_M_E4, rb_M_E8, rb_S_Z1, rb_S_Z2, rb_S_Z4, rb_S_E1, rb_S_E2, rb_S_E4, rb_S_E8}
    6. RadioButtons.ToList.ForEach(Sub(x)
    7. x.Checked = False
    8. x.Text = ""
    9. End Sub)
    10. End Sub
    Analog könntest Du sowas mit den Labels machen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielen Dank nochmal für die Hilfen soweit! ^^
    Das ist der Code jetzt, ich finde es sieht schon viel besser aus!

    VB.NET-Quellcode

    1. ​Imports System.ComponentModel.DataAnnotations
    2. Imports System.DirectoryServices.ActiveDirectory
    3. Public Class Form1
    4. 'Public IntStunde As Integer
    5. 'Public IntMinute As Integer
    6. 'Public IntSekunde As Integer
    7. Public StundeZMaxBin() As String = {"0", "0"}
    8. Public StundeZBin As String
    9. Public StundeEMaxBin() As String = {"0", "0", "0", "0"}
    10. Public StundeEBin As String
    11. Public MinuteZMaxBin() As String = {"0", "0", "0"}
    12. Public MinuteZBin As String
    13. Public MinuteEMaxBin() As String = {"0", "0", "0", "0"}
    14. Public MinuteEBin As String
    15. Public SekundeZMaxBin() As String = {"0", "0", "0"}
    16. Public SekundeZBin As String
    17. Public SekundeEMaxBin() As String = {"0", "0", "0", "0"}
    18. Public SekundeEBin As String
    19. Public BinString As String
    20. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    21. Presets()
    22. Timer1.Interval = 500
    23. Timer1.Start()
    24. End Sub
    25. Private Sub Presets()
    26. 'Kontrollabel für die Anzeige der Uhrzeit (HH:MM:SS)
    27. Label1.Text = ""
    28. Dim RadioButtons = {rb_H_Z1, rb_H_Z2, rb_H_E1, rb_H_E2, rb_H_E4, rb_H_E8, rb_M_Z1, rb_M_Z2, rb_M_Z4, rb_M_E1, rb_M_E2, rb_M_E4, rb_M_E8, rb_S_Z1, rb_S_Z2, rb_S_Z4, rb_S_E1, rb_S_E2, rb_S_E4, rb_S_E8}
    29. RadioButtons.ToList.ForEach(Sub(x)
    30. x.Checked = False
    31. x.AutoCheck = False
    32. x.Text = ""
    33. End Sub)
    34. End Sub
    35. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    36. Dim Time As String = CStr(DateAndTime.TimeOfDay)
    37. 'Time(11+12) --> Stunde
    38. 'Time(14+15) --> Minute
    39. 'Time(17+18) --> Sekunde
    40. Label1.Text = DateAndTime.TimeOfDay
    41. Umrechner(Val(Time(0)), 2)
    42. StundeZBin = BinString.ToString
    43. Umrechner(Val(Time(1)), 4)
    44. StundeEBin = BinString.ToString
    45. Umrechner(Val(Time(3)), 3)
    46. MinuteZBin = BinString.ToString
    47. Umrechner(Val(Time(4)), 4)
    48. MinuteEBin = BinString.ToString
    49. Umrechner(Val(Time(6)), 3)
    50. SekundeZBin = BinString.ToString
    51. Umrechner(Val(Time(7)), 4)
    52. SekundeEBin = BinString.ToString
    53. 'Errechnete Binärwärte in die Radiobuttons übertragen
    54. Setzen()
    55. End Sub
    56. Private Sub Setzen()
    57. 'Stunden Zehner
    58. rb_H_Z1.Checked = Not (StundeZBin(0) = "" Or StundeZBin(0) = "0")
    59. rb_H_Z2.Checked = Not (StundeZBin(1) = "" Or StundeZBin(1) = "0")
    60. 'Stunden Einer
    61. rb_H_E1.Checked = Not (StundeEBin(0) = "" Or StundeEBin(0) = "0")
    62. rb_H_E2.Checked = Not (StundeEBin(1) = "" Or StundeEBin(1) = "0")
    63. rb_H_E4.Checked = Not (StundeEBin(2) = "" Or StundeEBin(2) = "0")
    64. rb_H_E8.Checked = Not (StundeEBin(3) = "" Or StundeEBin(3) = "0")
    65. 'Minuten Zehner
    66. rb_M_Z1.Checked = Not (MinuteZBin(0) = "" Or MinuteZBin(0) = "0")
    67. rb_M_Z2.Checked = Not (MinuteZBin(1) = "" Or MinuteZBin(1) = "0")
    68. rb_M_Z4.Checked = Not (MinuteZBin(2) = "" Or MinuteZBin(2) = "0")
    69. 'Minuten Einer
    70. rb_M_E1.Checked = Not (MinuteEBin(0) = "" Or MinuteEBin(0) = "0")
    71. rb_M_E2.Checked = Not (MinuteEBin(1) = "" Or MinuteEBin(1) = "0")
    72. rb_M_E4.Checked = Not (MinuteEBin(2) = "" Or MinuteEBin(2) = "0")
    73. rb_M_E8.Checked = Not (MinuteEBin(3) = "" Or MinuteEBin(3) = "0")
    74. 'Sekunden Zehner
    75. rb_S_Z1.Checked = Not (SekundeZBin(0) = "" Or SekundeZBin(0) = "0")
    76. rb_S_Z2.Checked = Not (SekundeZBin(1) = "" Or SekundeZBin(1) = "0")
    77. rb_S_Z4.Checked = Not (SekundeZBin(2) = "" Or SekundeZBin(2) = "0")
    78. 'Sekunden Einer
    79. rb_S_E1.Checked = Not (SekundeEBin(0) = "" Or SekundeEBin(0) = "0")
    80. rb_S_E2.Checked = Not (SekundeEBin(1) = "" Or SekundeEBin(1) = "0")
    81. rb_S_E4.Checked = Not (SekundeEBin(2) = "" Or SekundeEBin(2) = "0")
    82. rb_S_E8.Checked = Not (SekundeEBin(3) = "" Or SekundeEBin(3) = "0")
    83. End Sub
    84. Private Sub Umrechner(Wert, Stellen)
    85. 'Max Werte
    86. 'StundenZ = 0-2
    87. 'StundenE = 0-9
    88. 'MinutenZ = 0-5
    89. 'MinutenE = 0-9
    90. 'SekundenZ = 0-5
    91. 'SekundenE = 0-9
    92. Dim IntWert As Integer = Val(Wert)
    93. Dim i As Integer = IntWert
    94. Dim Rest As Integer = 0
    95. BinString = ""
    96. If IntWert > 0 Then
    97. While i > 0
    98. BinString = String.Concat("1".ToString, BinString)
    99. i = Math.Truncate(i / 2)
    100. End While
    101. Else
    102. BinString = String.Concat("0".ToString, BinString)
    103. End If
    104. 'Fehlende Stellen auffüllen
    105. Rest = Stellen - BinString.Length
    106. While Rest > 0
    107. BinString = String.Concat("0".ToString, BinString)
    108. Rest = Stellen - BinString.Length
    109. End While
    110. 'BinString = BinString.ToString
    111. End Sub
    112. End Class


    Es besteht offenbar noch ein Problem bei der Umrechnung in Binär und/oder der Handhabung mit dem Binärstring. Die Radiobuttons werden zwar gesetzt, aber nicht zurückgesetzt. Der Radiobutton für die Sekunden müsste ja sekündlich an und aus gehen, das tut er aber nicht.
    Da muss ich nochmal schauen.

    Gibt es denn sonst noch etwas, was man besser machen kann?
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    Du arbeitest mit dem VB6-Namespace und Option Strict Off <X

    ##########

    Lass Dir mal in nem anderen Label den BinString ausgeben, dann siehst Du, dass die Umrechnen-Methode falsch läuft.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Spannend, ich hatte Option Strict On bereits in Visual Studio eingestellt. Wieso er das nun nicht für das Projekt übernommen hat...
    Naja, jetzt habe ich eine schöne Liste mit "Fehlern" :cursing:

    Abseits von dieser kosmetischen Kritik, gibt es noch weitere Vorschläge? :saint:

    ########

    Danke für den Hinweis @VaporiZed !
    Ich habe jetzt einige Zeit mit dem Schritt-Debugging verbracht und habe gelernt, dass Dezimal 4 neuerdings Binär 111 entspricht. Das ist natürlich falsch...
    Ich habe aber ehrlich gesagt keine Ahnung, was da wo und wieso falsch läuft :/
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne

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

    Falls (!) die Setzen*-Methode das tut, was sie soll, kannst Du die Befehlsduplikate** auslagern.

    VB.NET-Quellcode

    1. SetRadioButtonState(rb_H_Z1, StundeZBin(0))
    2. SetRadioButtonState(rb_H_Z2, StundeZBin(1))
    3. 'Stunden Einer
    4. SetRadioButtonState(rb_H_E1, StundeEBin(0))
    5. SetRadioButtonState(rb_H_E2, StundeEBin(1))
    6. SetRadioButtonState(rb_H_E4, StundeEBin(2))
    7. SetRadioButtonState(rb_H_E8, StundeEBin(3))
    8. '…
    9. Private Sub SetRadioButtonState(RadioButton As RadioButton, CharacterToCheck As String)
    10. RadioButton.Checked = Not (CharacterToCheck = "" OrElse CharacterToCheck = "0")
    11. 'warum eigentlich nicht das hier:
    12. 'RadioButton.Checked = CharacterToCheck = "1"
    13. End Sub


    * ein sehr ausbaufähiger Methodenname. Setzen ist erstens deutsch und zweitens zu unspezifisch. Eine Sub sollte ein Imperativ sein, also z.B. SetzeRadioButtons (schlechtes Beispiel, kommt der Sache aber näher) oder ShowTimeInGuiAsBinaryView.
    ** Befehlsduplikate sind immer gefährlich, weil man kopiert und einfügt, dann gerne ne Kleinigkeit übersieht, und wenn man was ändern muss, muss man zig Duplikate nachbearbeiten, daher Codeduplikate immer in Methoden auslagern, wenn möglich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Erstmal muss die Dez --> Bin Umrechnung laufen. Ich habe den Fehler inzwischen gefunden:

    Beispiel:
    123 / 2 = 61 Rest 1

    VB.NET-Quellcode

    1. cint(Math.Truncate(123 / 2)) 'ergibt 62

    Lasse

    VB.NET-Quellcode

    1. cint()
    weg habe ich zwar 61 allerdings als Double.

    Ich brauche also eine Methode, die mir 123/2 = 61 Rest 1 ausgibt... Und da weiß ich jetzt nicht weiter...

    Über Befehlsdupletten und Methoden-Namen mache ich mir noch Gedanken. Deine Ansätze sind schonmal gut :)
    Die Prüfung auf Null war den ersten Schritten geschuldet. Mir wäre eine Prüfung auf 1 auch lieber gewesen, ich hatte zu dem Zeitpunkt aber noch keine Ahnung wie das am besten geht :)
    Eine Pizza auf einer Pizza sind 2 Pizzen

    Eine Lasagne auf einer Lasagne ergibt 1 große Lasagne