ComboBox Namen vergleich funzt nicht

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Petersilie.

    ComboBox Namen vergleich funzt nicht

    Hallo Leute,

    ich möchte auf meiner Form1 ComboBoxen sperren,
    es sollen alle gesperrt werden, bis auf die aktive und die Nr.1 u. Nr.6

    Ich versuche es mit folgendem Code:

    VB.NET-Quellcode

    1. Function status_Combos(currentControl As String)
    2. Dim ctl As Control
    3. Dim ctlName As String
    4. Dim forbidden1 As String = "ComboBox1"
    5. Dim forbidden2 As String = "ComboBox6"
    6. For Each ctl In Form1.Controls
    7. If TypeOf ctl Is ComboBox Then
    8. ctlName = ctl.Name
    9. If ctlName <> currentControl Or ctlName <> forbidden1 Or ctlName <> forbidden2 Then
    10. ctl.Enabled = False
    11. End If
    12. End If
    13. Next
    14. End Function


    Damit sperrt er mir aber einfach alles... und ich begreife nicht was ich falsch mache?

    Habe es auch einfach mit "If ctl.Name <>" versucht und mit "If ctl.Name.ToString <>".
    Hat alles nicht geklappt
    forbidden als Variablenname zu verwenden könnte Dich ggf. selbst verwirren.
    Ganz allgemein: Statt Or sollte man OrElse verwenden (außer bei absichtlichen, gewollten bitweisen Vergleichen).
    Du musst aber in Deinem konkreten Code AndAlso statt Or (bzw. OrElse) verwenden. Nur so ergibt Dein Code die von Dir gewünschte Funktionalität.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Bei AndAlso wird die Bedingung rechts davon nicht mehr geprüft wenn die linke Bedingung bereits false ergeben hat, da das Gesamtergebniss ja gar nicht mehr true ausfallen kann.
    OrElse macht das Gleiche nur, dass wenn die linke Bedingung bereits true ist wird die Rechte nicht mehr ausgewertet.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Petersilie schrieb:

    AndAlso ist also ein NAND Gate und OrElse ein XOR wenn ich das richtig verstehe?
    Verstehst Du nicht richtig.
    Ergänzend zu den Ausführungen von @fichz vielleicht noch dies:
    Falls Du eine der Programmiersprachen C / C++ / C# kennst:
    And <=> &
    Or <=> |
    AndAlso <=> &&
    OrElse <=> ||
    Bei den unteren beiden Operatoren wird die Abarbeitung der folgenden Operatoren abgebrochen, wenn das Ergebnis fest steht, also:
    Bei A AndAlso B wird Ausdruck A ausgewertet. Ist dieser True, wird Ausdruck B ausgewertet. Ist er False, wird Ausdruck B nicht ausgewertet.
    Bei C OrElse D wird Ausdruck C ausgewertet. Ist dieser False, wird Ausdruck D ausgewertet. Ist er True, wird Ausdruck D nicht ausgewertet.
    Dies bietet Laufzeitvorteile, wenn die Reihenfolge der Operatoren richtig angegeben wird.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!