Forum: PC-Programmierung vb.net: Probleme mit If-Bedingung und String


von Andij (Gast)


Lesenswert?

Hallo, habe hier folgendes Beispiel aufgebaut:
1
 Public rechenvalues As Byte() = {&HA, &HB, &HC, &HD, &HE, &HF, &H8, &H9}


'Code in einem Button
1
Dim str1 As String = "ZG"
2
        Dim str2 As String = "DD"
3
        Dim str3 As String
4
        Dim str4 As String = "D"
5
        Dim bt1 As Byte
6
7
8
        Dim MyByte500 As Byte
9
        If Byte.TryParse(str4, System.Globalization.NumberStyles.AllowHexSpecifier, Nothing, MyByte500) Then
10
            bt1 = MyByte500
11
        Else
12
            MsgBox("FAILURE")
13
14
        End If
15
16
        If str1 = "ZG" Or str1 = "ZH" Or str1 = "ZI" Or str1 = "ZK" = False And str2 = "DD" Then str3 = (Add(bt1, 26).ToString("X"))
17
        If str1 = "ZG" Or str1 = "ZH" Or str1 = "ZI" Or str1 = "ZK" = True And str2 = "DD" Then str3 = str4

Was der Code machen soll: Bedingungen verschiedener Strings prüfen und 
dann entweder mit einer eigenen Rechenregel (siehe weiter unten) 
addieren, oder je nach Bedingung einfach str3 = str4

1
Private Function Add(ByVal startingValue As Byte, ByVal steps As Integer) As Byte
2
        Dim startingIndex = Array.IndexOf(rechenvalues, startingValue)
3
        Dim finalIndex = (startingIndex + steps) Mod rechenvalues.Length
4
        Dim finalValue = rechenvalues(finalIndex)
5
6
        Return finalValue
7
    End Function

Nun habe ich hier testweise
1
str1 = ZG und str2 = DD
 sowie
1
str4 = D
 wie oben festgelegt

Hier:
1
If str1 = "ZG" Or str1 = "ZH" Or str1 = "ZI" Or str1 = "ZK" = False And str2 = "DD" Then str3 = (Add(bt1, 26).ToString("X"))
2
        If str1 = "ZG" Or str1 = "ZH" Or str1 = "ZI" Or str1 = "ZK" = True And str2 = "DD" Then str3 = str4

Müsste nun also str 3 = str4 ausgeführt werden, wodurch str3 dann 
ebenfalls ein "D" ist.

Das funktioniert auch, ABER wenn nach dem DD noch folgender Satz kommt:
1
If str1 = "ZG" Or str1 = "ZH" Or str1 = "ZI" Or str1 = "ZK" = False And str2 = "A1" Then str3 = (Add(bt1, 20).ToString("X"))

wird mein str3 (eigentlich D) plötzlich zu einer 9. Wenn man nun den 
letzten If-Satz anschaut:
1
If... and str2 = "A1" then str3 = (Add(bt1, 20)

Würde man str3 (D) + 20 (mit meinen vorgegebenen Regeln) machen, kommt 
auch 9 raus.

Aber wieso zum Himmel passiert das, obwohl
1
and str2 = "A1"
 überhaupt nicht gegeben ist? str2 ist oben fest der Wert "DD" 
zugwiesen, wieso wird also die "Rechnung" für "str = A1" durchgeführt?

Kann jemand mal schauen was ich falsch mache?

von nobody (Gast)


Lesenswert?


von Andij (Gast)


Lesenswert?

nobody schrieb:
> 
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/strcomp-function

Da finde ich jetzt keine Erklärung wieso
1
(Add(bt1, 20)
 ausgeführt wird, obwohl die dazugehörige Bedingung (
1
and str2 = "A1"
 false ist, denn str2 ist DD.

von jibi (Gast)


Lesenswert?

Da fehlen ein paar Klammern um alle Or-Bedingungen, wie Andij schon 
bemerkt hat...

von Andij (Gast)


Lesenswert?

Da fehlten tatsächlich Klammern...dämlich wie das dann reagiert obwohl 
die
1
and str2 = "A1"
 - Bedingung ja trotzdem nie gegeben war, aber jetzt funktioniert ja 
alles.

von Schlaumaier (Gast)


Lesenswert?

Gewöhne dir an deinen Variablen EINDEUTIGE NAMEN zu geben. Sonnst hast 
du ganz schnell ein ganz großes Problem.

gute_variable = "ich bin gut".

str1 = "ich bin mist, tauf mich um".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.