Visual Studio 2013, IF THEN ELSE Anweisungen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Visual Studio 2013, IF THEN ELSE Anweisungen

    Hallo Leute, ich hab mal eine Frage und zwar möchte ich gerne wissen wie ich 2 Else-Anweisungen erstellen kann.

    IF = WENN
    THEN = DANN
    ELSE = SONST

    und ich möchte es folgendermaßen haben:
    Beispiel:
    Wenn Label1.Text = "Rot" Dann Label2.Text = "Ja es ist Rot"
    sonst Wenn Label1.Text = "Blau" dann Label2.Text = "Es ist nicht rot"
    sonst Wenn label1.Text = "Dunkelrot" dann label2.Text = "Es ist zwar Rot, aber das Falsche Rot"

    versteht ihr was ich meine?
    Ich brauche 2 Else Anweisungen
    weil ich 3 Anweisungen habe.

    Wenn das passiert, dann passiert das, sonst passiert und wenn nicht, dann passiert das.

    So sieht mein Code aus:

    VB.NET-Quellcode

    1. If Label1.Text < 1024 Then
    2. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024), 2).ToString & ("KB")
    3. Else
    4. If Label1.Text > 1024 Then
    5. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024), 2).ToString & ("MB")
    6. End If
    7. Else
    8. If Label1.Text > 1024 Then
    9. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024/ 1024), 2).ToString & ("GB")
    10. End If


    Nur beim Zweiten Else kommt der Fehler: "Fehler 2 "Else" muss ein entsprechendes "If" oder "ElseIf" voranstehen."

    Und wenn ich Elsself mache dann kommt folgendes: "Fehler 2 "Elself" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden."

    Auch wenn der Code für euch falsch oder hässlich aussieht, ignoriert das bitte mir geht es nur allein um die dritte Anweisung, weil ich diese brauche wenn ich die dritte Anweisung weglasse, dann funktioniert mein Programm das er von zwischen 0-1024 auf KB springt und ab 1024 auf MB springt.


    Aber wenn ich die dritte Anweisung einfach alleinstehend nutze zum Beispiel so:

    VB.NET-Quellcode

    1. If Label1.Text < 1000 Then
    2. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024), 2).ToString & ("KB")
    3. Else
    4. If Label1.Text > 1000 Then
    5. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024), 2).ToString & ("MB")
    6. End If
    7. End If
    8. If Label1.Text > 2000 Then
    9. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024), 2).ToString & ("GB")
    10. End If



    dann kommt eine Fehlermeldung:

    "Ein Ausnahmefehler des Typs "System.Reflection.TargetInvocationException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Ein Aufrufziel hat einen Ausnahmefehler verursacht.


    Meine Frage ist jetzt einfach was kommt als drittes hin?

    IF für WENN
    ELSE für SONST
    und was als drittes? Was kommt nach Else? Ich muss irgendwie die dritte Bedingung noch zu Else hinzufügen aber wenn ich das tue dann kommen nur Fehlermeldungen.


    Mit Select Case und so hab ich es schon versucht aber dann reagiert gar nichts mehr bei mir.
    Bitte um Tips :)

    LG Drake055

    ~blaze~: Thema verschoben

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „~blaze~“ ()

    Na, das sind doch absolute Basics, das hätte man sicher auch googlen können. Wie dem auch sei, meinst du sowas?

    VB.NET-Quellcode

    1. If (1=2) Then
    2. ' some stuff
    3. ElseIf (1=3) Then
    4. 'other stuff
    5. ElseIf (1=4) Then
    6. 'so geht es dann weiter
    7. Else
    8. 'Falls nix zutrifft kommt das hier. Ist Optional.
    9. End If


    Edit:

    Mach mal Option Strict On an. Und behebe die Fehler die dir angezeigt werden. Das hier ist schlechter Stil und geht im Schlimmsten Fall in die Hose:

    VB.NET-Quellcode

    1. Label1.Text > 1000
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mrMo“ ()

    Willkommen im Forum. :thumbup:

    Drake055 schrieb:

    VB.NET-Quellcode

    1. If Label1.Text > 1024 Then
    Stell Dir vor, im Label steht "Roulade mit Klößen" ( :thumbsup: ).
    Was soll denn dann Dein Vergleich bewirken?
    - Masse der Roulade in Gramm?
    - Anzahl der Erbsen?
    - ...
    Nimm den Option-Strict-On-Hinweis von @mrMo sehr ernst, denn so lernst Du nicht, was es für Typen von Variablen gibt.
    Beende mal alle Instanzen Deines Studios, dann öffnest Du eine und nimmst diese Einstellungen vor.
    Dann öffnest Du Dein Projekt, gibst ihm in den Projekteistellungen Option Strict On, berichtigst die Fehler (das dürften nur Konvertierungsfehler sein), und dann fangen wir an, Probleme zu lösen.
    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!
    bei mir erscheinen keine Fehler! ich habe die Codes so übernommen und sie funktionieren auch einwandfrei!
    nur bei mir wechselt er nicht auf GB
    wenn er 1000 KB erreicht hat, wechselt er auf 1,0 MB aber wenn er 1000 MB erreicht hat wechselt er nicht auf 1,0 GB sondern es macht einfach weiter 1001,00 MB, 1002,00 MB usw

    mit den 3 Else meine ich sowas in der Art:

    VB.NET-Quellcode

    1. If Augensumme = 12 Then
    2. Console.WriteLine("1. Preis")
    3. Else
    4. If Augensumme >= 10 Then
    5. Console.WriteLine("2. Preis")
    6. Else
    7. If Augensumme >= 7 Then
    8. Console.WriteLine("3. Preis")
    9. Else
    10. If Augensumme = 6 Then
    11. Console.WriteLine("Trostpreis")
    12. Else
    13. Console.WriteLine("Niete")
    14. End If
    15. End If
    16. End If
    17. End If


    Den Code habe ich von dieser Seite: de.wikibooks.org/wiki/Visual_B…ehrseitige_Entscheidungen

    Mein Downloader soll von heruntergeladene KB auf MB umspringen und von MB auf GB. Ich habe schon einige bzw viele Einträge hier im Forum angeguckt durchgelesen aber keins Half mir weiter! Und wenn ich Option-Strict-On nehme dann erscheinen solche Fehlermeldungen:
    "Fehler 5 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu." Und dann sagt es statt: "Math.Round((Double.Parse((downloadspeed1))", will er es in "Math.Round((Double.Parse(CStr((downloadspeed1)))" umändern und dann funktioniert bei mir noch weniger.
    Mein Code funktioniert und tut was es soll, nur von MB auf GB wechseln das klappt bei mir noch nicht und genau das ist mein Problem. Ich nehme gerne jeden Vorschlag an aber eure Ratschläge sind nur Kritik bzw. Ratschläge wie mein Code besser aussieht, aber ist keine Lösung für mein Problem das es nicht von MB auf GB wechselt. Eure Tips dienen nur zu Verschönerung des Codes aber bringen keine Lösung. Selbst wenn ich Option-Strict-On nutze ist mein Problem damit nicht gelöst und nur darum geht es mir, das es von MB auf GB wechselt auch ohne Option-Strict-On.


    Ich zeig euch mal meinen Kompletten Code.

    Wie gesagt ich möchte keine Kritik über den Code sondern nur einen Tipp oder eine Lösung wie ich das schaffe das er mit den Code den ich habe von MB auf GB wechselt. Hier der Code:

    Visual Basic-Quellcode

    1. [/url] Private Sub downloader1_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles downloader1.DownloadProgressChanged
    2. Dim bytesreceived1 As Double = e.BytesReceived
    3. Dim totalbytestoreceive1 As Double = e.TotalBytesToReceive
    4. Dim downloadspeed1 As Double = e.BytesReceived / (sw1.ElapsedMilliseconds / 1000)
    5. Dim timeinseconds1 As Double = (totalbytestoreceive1 - bytesreceived1) / downloadspeed1
    6. Dim downloadtime1 As Double = (sw1.ElapsedMilliseconds / 1000)
    7. 'Black Dragon Heart
    8. Me.ProgressBar1.Value = e.ProgressPercentage
    9. Me.Label5.Text = e.ProgressPercentage & " %"
    10. Me.Label2.Text = Math.Round((Double.Parse((e.TotalBytesToReceive)) / 1024 / 1024 / 1024), 2).ToString()
    11. Me.Label3.Text = Math.Round((Double.Parse((downloadspeed1)) / 1000 / 1000), 2).ToString()
    12. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024), 2).ToString
    13. 'Geschwindigkeit in KB/s, MB/s
    14. If Label3.Text < 1000 Then
    15. Label3.Text = Math.Round((Double.Parse((downloadspeed1)) / 1000), 2).ToString() & " KB/s"
    16. Else
    17. If Label3.Text > 1000 Then
    18. Label3.Text = Math.Round((Double.Parse((downloadspeed1)) / 1000 / 1000), 2).ToString() & " MB/s"
    19. End If
    20. End If
    21. 'Existierende Dateigröße in GB
    22. If Label2.Text < 1024 Then
    23. Label2.Text = Math.Round((Double.Parse((e.TotalBytesToReceive)) / 1024 / 1024 / 1024), 2).ToString & (" GB")
    24. End If
    25. 'Heruntergeladene Dateimenge in KB, MB, GB
    26. If Label1.Text < 1023 Then
    27. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024), 2).ToString & ("KB")
    28. Else
    29. If Label1.Text > 1024 Then
    30. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024), 2).ToString & (" MB")
    31. Else
    32. If Label1.Text > 1024 Then
    33. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024 / 1024), 2).ToString & (" GB")
    34. End If
    35. End If
    36. End If
    37. If ProgressBar1.Value = 1 Then
    38. Label4.Text = "Datei wird heruntergeladen ... "
    39. Label1.Visible = True
    40. Label2.Visible = True
    41. Label3.Visible = True
    42. End If
    43. If Label5.Text = "100 %" Then
    44. Label4.Text = "Der Download wurde erfolgreich heruntergeladen."
    45. Button5.Enabled = True
    46. End If
    47. End Sub[url='https://de.wikibooks.org/wiki/Visual_Basic_.NET:_Mehrseitige_Entscheidungen']


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

    Wenn Du keine Kritik über beschissenen Code willst, dann wird Dir niemand helfen können.
    Kritik ist leider notwendig, wenn man etwas verbessern will und MrMo sowie Rod haben Dir beide auch schon Hilfestellung gegeben.
    Selbst auf der von Dir velinkten Seite wird mit variablen von koreckten Typen (z.B. Integer) gerechnet und nicht mit Labels.
    Aber Du willst ja keine Kritik, sorry da müssen die Tipps leider auch fern bleiben.
    @Drake055:

    VB.NET-Quellcode

    1. If Label1.Text < 1023 Then
    2. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024), 2).ToString & ("KB")
    3. Else
    4. If Label1.Text > 1024 Then
    5. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024), 2).ToString & (" MB")
    6. Else
    7. If Label1.Text > 1024 Then
    8. Label1.Text = Math.Round((Double.Parse((e.BytesReceived)) / 1024 / 1024 / 1024), 2).ToString & (" GB")
    9. End If
    10. End If
    11. End If

    ist aus folgenden Gründen Mus (nicht gleich abschalten, es geht darum, warum der Code nicht so funktioniert, wie Du willst):
    Du unterscheidest in Stufe 1 (erste Einrückung) zwischen "Wenn ... kleiner als 1023 ist, dann mach A, ansonsten mach B"
    Ok, A scheint zu passen. Was ist mit Pfad B: "Wenn ... größer als 1024, dann mach C, sonst D."
    Ok, C scheint zu passen. Was ist mit Pfad D: "Wenn ... größer als 1024, dann mach E." <= Moment. Die Bedingung hatten wir doch schon. Das ist doch die Bedingung für Pfad C. Pfad D wird nie erreicht, weil es schon durch die anderen Pfade abgedeckt ist. Der Vergleich mit 1024 passt natürlich nicht. Der korrekte wäre 1024 x 1024 = 1048576. => If ... > 1048576 Then
    Aber Moment, trotzdem gibt es Lücken in Deiner Verzweigung. Was ist mit Werten zwischen 1023 und 1024? Diese werden durch keine Pfade abgedeckt.

    Da strukturelle Änderungen nicht gewollt sind, endet meine Ausführung hier. Möge sie Dir weitergeholfen haben.
    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.
    @Drake055 Du haben Option Strict Off. X(
    Du vergleichen Text mit Text: "10" < "2".
    Du machen Option Strict On. 8o
    Dann Du vergleichen Zahl mit Zahl: 10 > 2.
    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!