Ablauf im Programmcode funktioniert nicht

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Ablauf im Programmcode funktioniert nicht

    Folgender ABlauf sollte eigentlich stattfinden:

    VB.NET-Quellcode

    1. Dim report_manager As New report_manager
    2. Try
    3. If True Then
    4. Dim xyz = TryCast(Me.Report_select.SelectedItem, DataRowView)
    5. If xyz IsNot Nothing Then
    6. Dim zzz = xyz("back_report_bezeichnung").ToString()
    7. If zzz = "Stammdaten des Kunden" Then
    8. Me.index_Reportmanager.Text = zzz
    9. report_manager.ShowDialog()
    10. End If
    11. End If
    12. End If
    13. Catch ex As Exception
    14. MsgBox(Err.Number & ex.Message & ex.StackTrace.ToString)
    15. End Try


    VB.NET-Quellcode

    1. If Win007_1.Visibility Then
    2. If Win007_1.index_Reportmanager.Text = "Stammdaten des Kunden" Then
    3. MessageBox.Show("Stammdaten des Kunden")
    4. End If
    5. End If


    "If Win007_1.index_Reportmanager.Text = "Stammdaten des Kunden" Then" wir hier nicht erkannt. Was kann ich tun damit die Bedingungen "If Win007_1.index_Reportmanager.Text = "Stammdaten des Kunden" Then" erkannt wird.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thomas2705“ ()

    ich nehme mal an, mit "Bedingung nicht erkennen" ist gemeint, dass sie nicht zutriftt.
    Was kann man da machen?
    Naja, dafür sorgen, dass sie zutrifft.

    Dafür müsste man halt untersuchen, was tatsächlich in zzz drinne steht, bzw in Win007_1.index_Reportmanager.Text.

    Dazu Haltepunkt setzen und im Lokalfenster nachgucken.
    Zu Haltepunkt und so guggemol VisualStudio richtig nutzen

    Thomas2705 schrieb:

    If Win007_1.Visibility Then


    Ich kenn mich in VB nicht so gut aus aber braucht die Visibility nicht einen Wert oder ist die Standardmäßig auf true bzw false?
    Was gibt denn dein String aus ohne If?
    Ja, stimmt auch wieder. Also mal wieder ein Fehler, der nur unter Strict Off auftreten kann.

    Dringende Empfehlung an den Thomas2705: Stell dein Visualbasic so ein, dass eine ernst zu nehmende OOP-Sprache daraus wird: Visual Studio - Empfohlene Einstellungen

    Das löst jetzt nicht direkt das Problem, aber das löst das Problem, dass solche Probleme überhaupt auftreten können.
    Davon unbenommen lerne debuggen mit Haltepunkt, damit wär man auch recht zügig drauf gekommen - zumindest für den 2. Snippet.
    Was mit dem ersten ist, weiß ich nicht, aber auch da kommt man mit Haltepunkt sicherlich weiter.
    ZB klärt sich, bei welchem der 3 Ifs er eiglich aussteigt.

    oliver3121 schrieb:

    VB.NET-Quellcode
    If Win007_1.index_Reportmanager.Text = "Stammdaten des Kunden" = True Then
    MessageBox.Show("Stammdaten des Kunden")
    End If

    Nächste Frage:
    Braucht man in VB nur ein "="? ansonsten ist es ...des Kunden" == True Then
    @DaNeubi
    Ich weiß nicht, ob die Antwort von ErfinderDesRades alle Deine Fragen beantwortet hat, deshalb hier eine ausführliche Erklärung:

    Die Sache wie in C-ähnlichen Sprachen, dass eine Zuweisung gleichzeitig ein Ausdruck ist, gibt es in VB nicht.
    In C-ähnlichen Sprachen passiert es öfters mal, dass man versehentlich sowas macht:

    C#-Quellcode

    1. Foo f = Irgendwas;
    2. // Später dann:
    3. if (f = null) { ... }

    Also anstatt f mit null zu vergleichen (mit dem ==-Operator) weist man null f zu und wertet das aus. Das ist in diesem Fall natürlich immer null und der Code im If-Block wird nicht ausgeführt.
    (In C# funktioniert das zum Glück nicht, denn C# erlaubt in Bedingungen von If-Blöcken nur Booleans. Da komme ich gleich nochmal drauf zurück.)
    Damit man in C-ähnlichen Sprachen zwischen Zuweisung und Vergleich unterscheiden kann, gibt es zwei separate Operatoren. Der =-Operator weist zu und ist gleichzeitig ein Ausdruck (der das ergibt, was zugewiesen worden ist). Der ==-Operator vergleicht und gibt einen Boolean zurück (True bei Gleichheit, False bei Ungleichheit).

    In VB gibt es dieses Problem nicht. Der =-Operator ist Kontext-abhängig. Das heißt, wenn er in einem Ausdruck steht, vergleicht er.
    Also ein If-Block erwartet in If Ausdruck Then einen Ausdruck. Deshalb vergleicht der =-Operator an der Stelle.
    Hat man dagegen sowas wie ein Using (Using f = new Foo) oder eine For-Schleife (For i = 0 To 10) oder einfach nur eine simple Zuweisung (f = new Foo) (Ich weiß nicht, wie man diesen Kontext nennt), dann weist er zu.
    Es ist in VB nicht möglich, das Ergebnis einer Zuweisung gleichzeitig als Ausdruck zu verwenden, deshalb gibt es da keine Probleme.

    Und wegen If A = True:
    Es ist schon mal unsinnig, überhaupt Booleans nochmal mit True zu vergleichen. Da kommt ja nichts neues bei raus.
    So sollte es eigentlich gemacht werden:

    VB.NET-Quellcode

    1. Dim A As Boolean = Irgendwas
    2. 'Boolean auf True prüfen:
    3. If A Then
    4. 'Boolean auf False prüfen.
    5. If Not A Then

    Umso unsinniger ist es, If A = B = True zu schreiben. Das schadet der Lesbarkeit extrem.

    VB.NET-Quellcode

    1. Dim A As Boolean = Irgendwas
    2. Dim B As Boolean = Irgendwas
    3. 'Auf Gleichheit prüfen:
    4. If A = B Then
    5. 'Auf Ungleichheit prüfen.
    6. If A <> B Then
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Niko Ortner“ ()