Problem bei Erstellung einer Abfrage über leere Textfelder mit Hilfe von If-Then-Else-Anweisung

  • VB.NET

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

    Problem bei Erstellung einer Abfrage über leere Textfelder mit Hilfe von If-Then-Else-Anweisung

    Guten Tag zusammen!
    Ich habe folgendes Problem:
    Ich möchte eine Abfrage erstellen, bei der überprüft wird, ob leere Textfelder vorhanden sind. Die Variablen habe ich in einem Modul deklariert.
    Mein Code sieht folgendermaßen aus:

    VB.NET-Quellcode

    1. Straße = txtStraße.Text
    2. Hausnummer = txtHausnummer.Text
    3. Postleitzahl = txtHausnummer.Text
    4. Wohnort = txtWohnort.Text
    5. Land = txtLand.Text
    6. If Straße = "" Then
    7. MsgBox("Bitte geben Sie den Straßennahmen an.")
    8. Else
    9. If Hausnummer = "" Then
    10. MsgBox("Bitte geben Sie die Hausnummer an.")
    11. Else
    12. If Postleitzahl = "" Then
    13. MsgBox("Bitte geben Sie die Postleitzahl an.")
    14. Else
    15. If Wohnort = "" Then
    16. MsgBox("Bitte geben Sie den Wohnort an.")
    17. Else
    18. If Land = "" Then
    19. MsgBox("Bitte geben Sie das Land an.")
    20. Else
    21. Me.Hide()
    22. Form3.Show()
    23. End If
    24. End If
    25. End If
    26. End If
    27. End If


    Die Variablen im Modul:

    VB.NET-Quellcode

    1. Module Module1
    2. Public CPreName As String
    3. Public CName As String
    4. Public Straße As String
    5. Public Hausnummer As Single
    6. Public Postleitzahl As Single
    7. Public Wohnort As String
    8. Public Land As String
    9. End Module


    Den Fehlercode habe ich als Anhang hochgeladen.

    Vielen Dank schon mal im Voraus für Hilfestellungen.

    Edit: den Fehler der doppelten TextBox in zwei Variablen habe ich behoben, dennoch wird der Fehler weiterhin angezeigt.
    Bilder
    • fehlercode.JPG

      154,32 kB, 1.285×758, 151 mal angesehen

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

    Hausnummer und Postleitzahl sind bei dir Floats (Single) das sind Zahlen und keine Strings! Du kannst also nicht mit "" vergleichen. Desweiteren lässt sich die Postleitzahl 04600 z.B nicht mit einen Float darstellen, dafür müsstest du dir etwas anderes ausdenken. Floats werdeb zudem immer mit 0 initialisiert das heißt selbst bei einer Konvertierung zu String würde nicht "" rauskommen, sondern "0". Verwende am besten einen Nullable Float.
    Setze mal in den Projekteigenschaften, Reiter "Kompilieren", die Option "Strict On".
    Dann gibt es auch eine Fehlermeldung, mit der du etwas anfangen kannst:

    Fehler 1 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu.

    Immerhin vergleichst du einen Typ Double mit einem Typ String. Das funktioniert natürlich nicht.

    Statt: If Hausnummer = "" Then...
    Besser: If txtHausnummer.Text = "" Then...
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Willkommen im Forum. :thumbup:

    Ramiyu schrieb:

    Die Variablen habe ich in einem Modul deklariert.
    Die Variablen gehören in eine Klasse.
    Mit ElseIf sieht Dein Code doch schon freundlicher aus, oder?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Straße = txtStraße.Text
    3. Hausnummer = txtHausnummer.Text
    4. Postleitzahl = txtPostleitzahl.Text
    5. Wohnort = txtWohnort.Text
    6. Land = txtLand.Text
    7. If Straße = "" Then
    8. MsgBox("Bitte geben Sie den Straßennahmen an.")
    9. ElseIf Hausnummer = "" Then
    10. MsgBox("Bitte geben Sie die Hausnummer an.")
    11. ElseIf Postleitzahl = "" Then
    12. MsgBox("Bitte geben Sie die Postleitzahl an.")
    13. ElseIf Wohnort = "" Then
    14. MsgBox("Bitte geben Sie den Wohnort an.")
    15. ElseIf Land = "" Then
    16. MsgBox("Bitte geben Sie das Land an.")
    17. Else
    18. 'Me.Hide()
    19. 'Form3.Show() ' Das ist alter VB6-Ranz!!!
    20. End If
    21. End Sub
    Zum Aufruf von Dialogen gugst Du hier.Bevor Du weiter machst, verstehe dies und was @ThuCommix Dir geschrieben hat.
    Fang an mit Option Strict On.
    ---------
    Früher gab es mal ne Meldung, wenn zwischenzeitlich Posts eingingen. :/
    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!
    Kann ich dann trotzdem anschließend die beiden Textfelder in Variablen einbinden?

    Versuche es mal mit dieser Technik:

    VB.NET-Quellcode

    1. Dim Hausnummer As Single
    2. If Not Single.TryParse(txtHausnummer.Text, Hausnummer) Then
    3. MessageBox.Show("Bitte geben Sie die Hausnummer an.")
    4. End If

    Entweder kann das Textfeld als Zahl interpretiert werden und das Ergebnis steht in "Hausnummer",
    oder die Messagebox wird angezeigt. Bitte auf "MessageBox.Show umsteigen", MsgBox ist nicht mehr frisch.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!

    Ramiyu schrieb:

    Kann ich dann trotzdem anschließend die beiden Textfelder in Variablen einbinden?


    Wenn ich deine Frage richtig verstanden habe ja. Man kann über Textfelder Variablen eingeben. Dabei muss man nur den String des Texfteldes in das gewünschte Format bringen. Wenn du Hausnummer beispielsweise
    ein Integer ist, dann würde das so aussehen:

    VB.NET-Quellcode

    1. Hausnummer = CInt(txtHausnummer.text)


    Wichtig dabei ist, dass man ein ExceptionHandling hat. Nicht jeder String lässt sich in ein anderes Format umwandeln. 48a würde beispielsweise einen Fehler verursachen.

    PS: Alternative zur Konvertierung in Single:

    VB.NET-Quellcode

    1. Hausnummer = Convert.ToSingle(txtHausnummer.text)
    Option strict = on

    If it's stupid and it works it ain't stupid.

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

    @petaod Jou. Dies allerdings mit Sicherheit, ohne Konjunktiv. ;)
    @Ramiyu Wenn Du das Land abfragst, müsstest Du die dortigen Gepflogenheiten implementieren, falls sie sich von unseren unterscheiden.
    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!