Hilfe beim erstellen einer Schleife

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von kasanurii.

    Hilfe beim erstellen einer Schleife

    Guten Tag,

    Würde gerne etwas Hilfe gestellt bekommen ob jemand eine Idee hat diesen Code in eine Schleife zu packen um ihn villeicht zu komprimieren und erweitern zu können

    Code:

    VB.NET-Quellcode

    1. If Val(TextBox47.Text) = 0 Then
    2. TextBox56.Text = ""
    3. ElseIf Val(TextBox47.Text) <= 5 Then
    4. TextBox56.Text = 5
    5. ElseIf Val(TextBox47.Text) <= 5 + 2.5 Then
    6. TextBox56.Text = 5 + 2.5
    7. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 2) Then
    8. TextBox56.Text = 5 + (2.5 * 2)
    9. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 3) Then
    10. TextBox56.Text = 5 + (2.5 * 3)
    11. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 4) Then
    12. TextBox56.Text = 5 + (2.5 * 4)
    13. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 5) Then
    14. TextBox56.Text = 5 + (2.5 * 5)
    15. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 6) Then
    16. TextBox56.Text = 5 + (2.5 * 6)
    17. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 7) Then
    18. TextBox56.Text = 5 + (2.5 * 7)
    19. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 8) Then
    20. TextBox56.Text = 5 + (2.5 * 8)
    21. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 9) Then
    22. TextBox56.Text = 5 + (2.5 * 9)
    23. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 10) Then
    24. TextBox56.Text = 5 + (2.5 * 10)
    25. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 11) Then
    26. TextBox56.Text = 5 + (2.5 * 11)
    27. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 12) Then
    28. TextBox56.Text = 5 + (2.5 * 12)
    29. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 13) Then
    30. TextBox56.Text = 5 + (2.5 * 13)
    31. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 14) Then
    32. TextBox56.Text = 5 + (2.5 * 14)
    33. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 15) Then
    34. TextBox56.Text = 5 + (2.5 * 15)
    35. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 16) Then
    36. TextBox56.Text = 5 + (2.5 * 16)
    37. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 17) Then
    38. TextBox56.Text = 5 + (2.5 * 17)
    39. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 18) Then
    40. TextBox56.Text = 5 + (2.5 * 18)
    41. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 19) Then
    42. TextBox56.Text = 5 + (2.5 * 19)
    43. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 20) Then
    44. TextBox56.Text = 5 + (2.5 * 20)
    45. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 21) Then
    46. TextBox56.Text = 5 + (2.5 * 21)
    47. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 22) Then
    48. TextBox56.Text = 5 + (2.5 * 22)
    49. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 23) Then
    50. TextBox56.Text = 5 + (2.5 * 23)
    51. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 24) Then
    52. TextBox56.Text = 5 + (2.5 * 24)
    53. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 25) Then
    54. TextBox56.Text = 5 + (2.5 * 25)
    55. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 26) Then
    56. TextBox56.Text = 5 + (2.5 * 26)
    57. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 27) Then
    58. TextBox56.Text = 5 + (2.5 * 27)
    59. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 28) Then
    60. TextBox56.Text = 5 + (2.5 * 28)
    61. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 29) Then
    62. TextBox56.Text = 5 + (2.5 * 29)
    63. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 30) Then
    64. TextBox56.Text = 5 + (2.5 * 30)
    65. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 31) Then
    66. TextBox56.Text = 5 + (2.5 * 31)
    67. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 32) Then
    68. TextBox56.Text = 5 + (2.5 * 32)
    69. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 33) Then
    70. TextBox56.Text = 5 + (2.5 * 33)
    71. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 34) Then
    72. TextBox56.Text = 5 + (2.5 * 34)
    73. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 35) Then
    74. TextBox56.Text = 5 + (2.5 * 35)
    75. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 36) Then
    76. TextBox56.Text = 5 + (2.5 * 36)
    77. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 37) Then
    78. TextBox56.Text = 5 + (2.5 * 37)
    79. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 38) Then
    80. TextBox56.Text = 5 + (2.5 * 38)
    81. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 39) Then
    82. TextBox56.Text = 5 + (2.5 * 39)
    83. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 40) Then
    84. TextBox56.Text = 5 + (2.5 * 40)
    85. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 41) Then
    86. TextBox56.Text = 5 + (2.5 * 41)
    87. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 42) Then
    88. TextBox56.Text = 5 + (2.5 * 42)
    89. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 43) Then
    90. TextBox56.Text = 5 + (2.5 * 43)
    91. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 44) Then
    92. TextBox56.Text = 5 + (2.5 * 44)
    93. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 45) Then
    94. TextBox56.Text = 5 + (2.5 * 45)
    95. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 46) Then
    96. TextBox56.Text = 5 + (2.5 * 46)
    97. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 47) Then
    98. TextBox56.Text = 5 + (2.5 * 47)
    99. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 48) Then
    100. TextBox56.Text = 5 + (2.5 * 48)
    101. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 49) Then
    102. TextBox56.Text = 5 + (2.5 * 49)
    103. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 50) Then
    104. TextBox56.Text = 5 + (2.5 * 50)
    105. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 51) Then
    106. TextBox56.Text = 5 + (2.5 * 51)
    107. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 52) Then
    108. TextBox56.Text = 5 + (2.5 * 52)
    109. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 53) Then
    110. TextBox56.Text = 5 + (2.5 * 53)
    111. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 54) Then
    112. TextBox56.Text = 5 + (2.5 * 54)
    113. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 55) Then
    114. TextBox56.Text = 5 + (2.5 * 55)
    115. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 56) Then
    116. TextBox56.Text = 5 + (2.5 * 56)
    117. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 57) Then
    118. TextBox56.Text = 5 + (2.5 * 57)
    119. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 58) Then
    120. TextBox56.Text = 5 + (2.5 * 58)
    121. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 59) Then
    122. TextBox56.Text = 5 + (2.5 * 59)
    123. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 60) Then
    124. TextBox56.Text = 5 + (2.5 * 60)
    125. End If


    Erstellt mit Visual Basic 2017

    MFG :)

    *Topic verschoben, BBCode angepasst*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @kasanurii,

    ​nimm eine For-Schleife

    VB.NET-Quellcode

    1. ​For i = 0 to 60

    und ersetze den Multiplikator

    VB.NET-Quellcode

    1. ​(2.5 * 2)

    hier die 2 mit i

    ​somit hast du nur eine If-Abfrage in der Schleife

    Diesen Teil

    VB.NET-Quellcode

    1. ​ElseIf Val(TextBox47.Text) <= 5 Then
    2. TextBox56.Text = 5
    3. ElseIf Val(TextBox47.Text) <= 5 + 2.5 Then
    4. TextBox56.Text = 5 + 2.5

    kann man ja als

    VB.NET-Quellcode

    1. ​ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 0) Then
    2. TextBox56.Text = 5
    3. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 1) Then
    4. TextBox56.Text = 5 + 2.5

    sehen

    Gruss

    ​mikeb69
    @mox,
    Für mich wiederholt sich dieser Teil

    VB.NET-Quellcode

    1. ElseIf Val(TextBox47.Text) <= 5 + (2.5 * 2) Then
    2. TextBox56.Text = 5 + (2.5 * 2)

    kann also in eine Schleife wenn man die 2 mit der Schleifenvariable ersetzt.

    Oder hab ich was übersehen ?

    Das mit der Konvertierung in einen int oder double mal unberücksichtigt.
    ​Und das man mit TextBox Inhalten so nicht umgeht aus unberücksichtigt.

    Gruss

    mikeb69
    @kasanurii Willkommen im Forum. :thumbup:
    1. Machst Du Option Strict On, damit Du Dich nicht wunderst, wenn "Roulade mit Klößen" in einen numerischen Wert konvertiert werden soll.
    2. konvertiert wird mit Double.Parse(...), schließlich arbeiten wir mit VB.NET und nicht mit VB6.
    3. Wesetze die TextBox durch ein NumericUpDown-Control und Du hast sehr viel weniger Sorgen mit Strings und numerischen Werten.
    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!
    Hallo,

    Also der Versuch es in eine Schleife zu packen klappt leider nicht, er zeigt mir dann nur den endwert an.

    Also das größere Problem ist dass ich das für 20 Textboxen machen muss und das gut arbeit sein würde
    Daher suche ich nach auswegen es effizient und einfach zu gestalten

    MFG
    @kasanurii Beschreib mal, ohne Code zu verwenden, was Du eigentlich erreichen willst.
    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, es ist ein Projekt mit welchem ich nach einem Test eine bestimmte Gewichtanzahl ausrechnen lassen will. Aber es gibt nur bestimmte abstände zwischen den Gewichten, demnach soll er mir anzeigen was das ausgerechnete gewicht ist und was der nächst mögliche gewichtsblock ist. Das ausrechnen klappt alles einwandfrei, das anzeigen klappt nach der Methode auch, nur muss ich das bis 100 und höher setzen und dass zu schreiben oder auch "copy paste" dauert zu lange da es mehrmals mit verschiedenen gewichtsblöcken gemacht werden muss
    Also der Versuch es in eine Schleife zu packen klappt leider nicht, er zeigt mir dann nur den endwert an.

    Du musst die schleife auch beim ersten fund verlassen.

    VB.NET-Quellcode

    1. For...
    2. If Val(TextBox47.Text) <= 5 + (2.5 * i) Then
    3. TextBox56.Text = 5 + (2.5 * i)
    4. break
    5. End If
    @kasanurii
    Ich hab das ganze mal gaaaaaaaaaaaaaaaaanz ausführlich hingeschrieben:

    VB.NET-Quellcode

    1. Dim value1 = NumericUpDown1.Value ' das wäre Val(TextBox47.Text)
    2. Dim value2 = value1 - 5
    3. Dim value3 = CInt(value2 / 2.5)
    4. Dim value4 = 5 + (2.5 * value3)
    5. TextBox56.Text = value4.ToString
    Feddich.
    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!
    @kasanurii OMG.
    Zieh Dir ein NumericUpDown-Control auf die GUI.
    Gib ihm folgende Properties:

    Doppelklicke auf das Control und füge den Code in die ValueChanged-Prozedur ein.

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    2. Dim value1 = NumericUpDown1.Value
    3. Dim value2 = value1 - 5
    4. Dim value3 = CInt(value2 / 2.5)
    5. Dim value4 = 5 + (2.5 * value3)
    6. Label1.Text = value4.ToString
    7. End Sub
    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!
    Eine NumericUpDownwürde sicher mehr Sinn machen. Jedoch wenn es unbedingt sein muss, das über eine Textbox zu machen, dann wäre so was sicher auch nicht schlecht.

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Module Module1
    4. Public Function RoundText(ByVal d As Decimal) As Decimal
    5. Return Decimal.Round(d, 2, MidpointRounding.AwayFromZero)
    6. End Function
    7. Public Function CalcNumber(ByVal d As Decimal) As String
    8. If d = 0 Then Return String.Empty
    9. For i As Integer = 0 To 60
    10. If d <= 5 + (2.5 * i) Then
    11. Return RoundText(5D + (2.5D * i)).ToString
    12. End If
    13. Next
    14. Return Nothing
    15. End Function
    16. Public Sub Main()
    17. 'Den Wert der TextBox47.Text (hier eine Annahme)
    18. Dim sTB47 As String = "5.2985"
    19. If IsNumeric(sTB47) Then
    20. Dim dec As Decimal = CDec(sTB47)
    21. 'Das Resultat in deine TextBox56.Text
    22. Dim sTB56 As String = CalcNumber(dec)
    23. Stop
    24. End If
    25. End Sub
    26. End Module


    Edit: Korrigiert

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    Passiert leider nichts.

    Also mein Ziel ist es, dass ich eine Textbox habe die z.B. von dem Maximalwert sagen wir 45, 60% nimmt, also 27. Darunter habe ich eine weitere Textbox welche dann den nächstmögliche Block anzeigt, der wäre ja auch 27 in dem Fall. Aber er soll halt auch wenn der 60% wert z.B. 200 ist den nächsten Block nehmen oder dass ich den Code wie am Anfang geschrieben bis auf * 200 runterschreibe
    @kasanurii Wieviel Erfahrung mit der Programmieerung hast Du?
    Wenn Du lesen könntest, wäre Dir der Kommentar in meinem Code in Post #11 aufgefallen.
    Ersetze NumericUpDown1.Value durch das, was im Kommentar steht.
    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!
    Jetzt habe ich es verstanden.
    Ja ich habe vorkenntnisse, aber wie bereits geschrieben, habe ich seit langem nichtmehr damit gearbeitet und dadurch viel verlernt.

    Ich danke euch allen für die Hilfe und entschuldige mich für das ofte nachfragen, aber jetzt habe ich alles soweit verstanden.


    Schönen abend euch allen noch :)

    Quellcode

    1. Dim value1 = Val(TextBox2.Text)
    2. Dim value2 = value1 - 2.5
    3. Dim value3 = CInt(value2 / 3.5)
    4. Dim value4 = 2.5 + (3.5 * value3)
    5. TextBox11.Text = value4.ToString


    Kurz noch eine Frage, kann ich der Textbox bei diesem Wert sagen dass sie solange Textbox1 den Wert "" hat nichts anzeigt ? Denn so steht permanent -1 in der Box bis etwas drinn steht.
    Das Update läuft permament über einen Timer