Elseif mit Array

  • VB.NET

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

    Elseif mit Array

    Hallo,

    ich habe mal wieder eine Frage:
    Ich habe unten im Spoiler den ganzen Code und hier direkt drunter, um was es mir geht und zwar:

    Ich wollte diesen Array in der Elseif Funktion prüfen lassen. Zuerst habe ich an eine For Each Schleife gedacht dann aber was von List(Of String) gelesen. Wie kann ich das umsetzen? (Daraus resultiert, dass mein Code an dieser Stelle nicht funktioniert :) )

    Freue mich über Feedback.

    VB.NET-Quellcode

    1. Dim WPBEL = New List(Of String) From {"x, y, z"}
    2. ElseIf Not Name = WPBEL.Contains(ToString) Then
    3. ckb_e3.Enabled = False
    4. ckb_b3.Enabled = False
    5. ckb_e4.Enabled = False
    6. ckb_b4.Enabled = False
    7. ckb_e5.Enabled = False
    8. ckb_b5.Enabled = False


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Aktuell()
    2. Dim pan() = {pan_e, pan_b}
    3. Dim Klasse = tbx_class.Text
    4. Dim Name = cbx_main.Text
    5. Dim WPBEL = New List(Of String) From {"x, y, z"}
    6. If Name = "a" Then
    7. For Each panel As Panel In pan
    8. For Each ckb As CheckBox In panel.Controls.OfType(Of CheckBox)()
    9. ckb.Enabled = False
    10. Next
    11. Next
    12. ElseIf Name = "b" Then
    13. ckb_e4.Enabled = False
    14. ckb_b4.Enabled = False
    15. ckb_e5.Enabled = False
    16. ckb_b5.Enabled = False
    17. ElseIf Name = "c" Then
    18. ckb_e3.Enabled = False
    19. ckb_b3.Enabled = False
    20. ElseIf Name = "d" Then
    21. ckb_e3.Enabled = False
    22. ckb_b3.Enabled = False
    23. ckb_e4.Enabled = False
    24. ckb_b4.Enabled = False
    25. ckb_e5.Enabled = False
    26. ckb_b5.Enabled = False
    27. ElseIf Not Name = WPBEL.Contains(ToString) Then
    28. ckb_e3.Enabled = False
    29. ckb_b3.Enabled = False
    30. ckb_e4.Enabled = False
    31. ckb_b4.Enabled = False
    32. ckb_e5.Enabled = False
    33. ckb_b5.Enabled = False
    34. Else
    35. For Each panel As Panel In pan
    36. For Each ckb As CheckBox In panel.Controls.OfType(Of CheckBox)()
    37. ckb.Enabled = True
    38. Next
    39. Next
    40. End If
    41. End Sub

    VB.NET-Quellcode

    1. ​Dim WPBEL = New List(Of String) From {"x", "y", "z"}

    VB.NET-Quellcode

    1. ElseIf Not WPBEL.Contains(Name)


    du lädst derzeit nur 1 Element in deine Liste. die elemente müssen einzeln, komma getrennt geschrieben werden.
    Abfrage siehe oben
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    verstehst du die Änderungen oder hast du das nur eingefügt und es geht?
    Wenn fragen sein sollten, frag. Es gibt nichts schlimmeres als die Selbe Frage dank C&P doppelt stellen zu müssen.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Acr0most Ja das mit den {"x", "y"} habe ich geändert, war natürlich überhastet von mir übersehen.
    Das andere habe ich dann angepasst und mir dabei gedacht "Elseif Array(Name)" also es wird nach den Segmenten aus dem "Array" in "Name" gesucht, bzw. "Not". :)
    Habe ich das so grob richtig wiedergegeben?

    Vielen Dank.
    Du hast eine Liste, der du Elemente x, y, z hinzufügst.
    das .Contains macht folgendes:

    es werden die Elemente deiner Liste angeschaut, ob hier irgendwo eine Übereinstimmung mit deinem Such-Element (Name) vorhanden ist.
    Wenn ja, gibt die Funktion true zurück.

    Sprich es wird nicht gesucht ob irgendein Element in Namen enthalten ist, sondern ob das Element Name in deinem Array auftaucht. :)

    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Acr0most schrieb:

    Sprich es wird nicht gesucht ob irgendein Element in Namen enthalten ist, sondern ob das Element Name in deinem Array auftaucht.


    @Acr0most Wenn ich das jetzt richtig verstanden habe, ist es also andersherum als ich gesagt habe, oder? :)
    genau :thumbsup:

    weil du übergibst ja einen Namen, das ist ja kein Array und auch keine Liste, sprich da kannst du nichts drin Suchen.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Was unterscheidet dann in so einem Fall eine For Each Schleife, von einem List(of String)?
    Ich hätte ja theoretisch sowohl das eine, als auch das andere verwenden können, oder?
    NaNaNa, jetzt vermische mal nicht Objekte und Methoden/Selektionen.

    Liste, Array = Objekt
    .Contains, ... = Methoden

    Eine Liste ist im Grunde ein dynamisches Array. Eu musst vorher keine feste Größe definieren, kannst ganz einfach per .Add und .Remove Werte hinzufügen usw. Das erleichtert die Arbeit sehr, vor Allem wenn die Anzahl der Elemente ungewiss ist.

    Du könntest evtl. eine Foreach anstatt dem Contains verwenden, um manuell den Wert zu überprüfen.

    VB.NET-Quellcode

    1. For Each element as String in liste
    2. if element = name Then
    3. 'gefunden
    4. end if
    5. Next



    warum macht man das nicht? - Weil es die Funktion im Kurzform (.Contains(suchelement)) bereits gibt. ^^


    also: eine Liste ist kein ersatz für eine For-each, das ist ein komplett anderes Thema!
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Sorry das ich die Begriffe im falschen Kontext verwendet habe (bin noch Brandneu). :)
    Vielen Dank für deine Erklärung, wenn ich daraus jetzt schließe:
    • Ich habe eine Liste (Array) mit fixen oder variablen Inhalten, empfiehlt es sich eine List(Of String) zu verwenden.
    • Wobei ich bei variablen Inhalten, vermutlich die Liste (Array) entsprechend anpassen muss.
    auch hier wieder Liste != Array. interessanter Artikel dazu hier

    Vorteil Liste: dynamisch, einfaches Handling
    Vorteil Array: Zugriff per Index, Fest definierte Größe, Index werden nicht aktualisiert, wenn ein Element gelöscht wird.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:

    Sam85 schrieb:

    VB.NET-Quellcode

    1. ckb_e3.Enabled = False
    2. ckb_b3.Enabled = False
    3. ckb_e4.Enabled = False
    4. ckb_b4.Enabled = False
    5. ckb_e5.Enabled = False
    6. ckb_b5.Enabled = False
    Wenn Du die Controls in ein Panel / eine GroupBox packst, kannst Du dieses in einem Einzeiler disablen und alle drin liegenden Controls sind ebenfalls ge-disabled.

    VB.NET-Quellcode

    1. GroupBox1.Enabled = False
    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 das hatten wir in einen anderen Thread besprochen :), in diesem Fall sind leider nicht alle Buttons betroffen, es geht von 1-6 also 1,2 und 6 sind nicht betroffen somit kann ich nicht alle zusammen schalten, oder kann ich das dann mit "i = 3-5" verbauen?

    Jedoch habe ich etwas ganz anderes als Problem entdeckt. Und zwar wenn ich den Code ausführe, wird das unchecken nicht korrekt angepasst, ich vermute die Reihenfolge aber an und für sich wird das ComboBoxFeld doch jedesmal neu überprüft?

    (Ich habe eine Combobox mit den Werten a bis q und der Code wird im SelectedIndexChange Event und im Load Event ausgeführt)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Aktuell()
    2. Dim Klasse = tbx_class.Text
    3. Dim Name = cbx_main.Text
    4. Dim WPBEL = New List(Of String) From {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"}
    5. Dim SEL = New List(Of String) From {"k", "l", "m"}
    6. If Name = "n" Then
    7. PanenF()
    8. ElseIf Name = "o" Then
    9. ckb_e4.Enabled = False
    10. ckb_b4.Enabled = False
    11. ckb_e5.Enabled = False
    12. ckb_b5.Enabled = False
    13. ElseIf Name = "p" Then
    14. ckb_e3.Enabled = False
    15. ckb_b3.Enabled = False
    16. ckb_e4.Enabled = False
    17. ckb_b4.Enabled = False
    18. ckb_e5.Enabled = False
    19. ckb_b5.Enabled = False
    20. ElseIf Name = "q" Then
    21. ckb_e3.Enabled = False
    22. ckb_b3.Enabled = False
    23. ElseIf WPBEL.Contains(Name) Then
    24. ckb_e3.Enabled = False
    25. ckb_b3.Enabled = False
    26. ckb_e4.Enabled = False
    27. ckb_b4.Enabled = False
    28. ckb_e5.Enabled = False
    29. ckb_b5.Enabled = False
    30. ElseIf SEL.Contains(Name) Then
    31. PanenT()
    32. End If
    33. Sub PanenT()
    34. Dim pan() = {pan_e, pan_b}
    35. For Each panel As Panel In pan
    36. For Each ckb As CheckBox In panel.Controls.OfType(Of CheckBox)()
    37. ckb.Enabled = True
    38. Next
    39. Next
    40. End Sub
    41. Sub PanenF()
    42. Dim pan() = {pan_e, pan_b}
    43. For Each panel As Panel In pan
    44. For Each ckb As CheckBox In panel.Controls.OfType(Of CheckBox)()
    45. ckb.Enabled = False
    46. Next
    47. Next
    48. End Sub


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

    Sam85 schrieb:

    und im Load Event ausgeführt
    Überzeuge Dich davon, dass er am Ende des Form_Load-Events ankommt, mach da nen Haltepunkt oder eine MessageBox hin (als letzte Zeile im Form_Load). Dieses Event ist nämlich besonders ausgerüstet mit dem Ignorieren mancher Exceptions.
    Ansonsten verlege das ins Form_Shown-Event.
    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!