Problem mit Schleife

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Samus Aran.

    Problem mit Schleife

    Hallo zusammen,

    ich erstelle gerade ein kleines Programm und möchte beim Starten der Form1 mit einer Schleife (ich habe keine Ahnung von Schleifen) überprüfen, ob TextBox1 & TextBox2 mit Text gefüllt sind und wenn nicht Me.Button1.Enabled = False. Sobald beide TextBoxen mit Text gefüllt sind, soll Me.Button1.Enabled = True.

    Ich würde mich sehr über eine Antwort freuen
    und bedanke mich schon einmal :)

    MFG Alemannia96
    Ich glaube so solte es gehen bin mir aber nicht sicher:

    VB.NET-Quellcode

    1. If Textbox1.Text And Textbox2.Text <> 1 Then
    2. Button1.Enabled = True
    3. Else
    4. Button1.Enabled = False

    Dann solltest dir dringend mal die Grundlagen anschaun!
    Ansosten:
    Bei start button einfach auf enabled=false
    Bei den keydownEvents der Textboxen überprüfen ob beide gefüllt sind und dann den button enablen.
    (Das alles ohne Schleifen ....)
    mfg.skyscater

    SystemUnknow schrieb:

    VB.NET-Quellcode

    1. If textbox1.text > "" and textbox2.text > "" Then
    2. button.enabled = True
    3. else
    4. button.enabled = False
    5. end if

    And gehört zu den böse Funktionen, für dies inzwischen bessere Ersätze gibt.


    Weiters kann mans wesentlich kompakter formulieren - dann tritt auch die Logik besser hervor:

    VB.NET-Quellcode

    1. button.enabled= textbox1.text > "" andalso textbox2.text > ""

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

    Ich find das zwar nett das du immer drauf hinweist, dennoch in ALLEn Büchern die ich bis jetzt gelsesen habe bzw. am lesen bin oder mal reingeschaut habe ( z.B. Jetzt lerne ich Vb 2010) ist es genauso in jeder Schleife mit and bzw. & !

    ErfinderDesRades schrieb:

    SystemUnknow schrieb:

    VB.NET-Quellcode

    1. If textbox1.text > "" and textbox2.text > "" Then
    2. button.enabled = True
    3. else
    4. button.enabled = False
    5. end if

    And gehört zu den böse Funktionen, für dies inzwischen bessere Ersätze gibt.


    Weiters kann mans wesentlich kompakter formulieren - dann tritt auch die Logik besser hervor:

    VB.NET-Quellcode

    1. button.enabled= textbox1.text > "" andalso textbox2.text > ""
    Bei AND: der erste und der zweite Ausdruck werden geprüft
    Bei ANDALSO: der zweite Ausdruck wird nicht mehr geprüft, wenn der erste nicht zutrifft.
    Das gibt in gewissen Situationen Geschwindigkeitsvorteile. Ist aber in diesem Beispiel irgendwie ein Overkill.

    PS: die objektorientiere Antwort auf das Problem des Threaderstellers steht in Post #4!

    Kleiner MOD-Hinweis noch hinterher:
    Fakt 1: Man darf cstr, msgbox und Konsorten auch benutzen.
    Fakt 2: Es gibt aktuellere und umfangreichere Methoden dafür.
    Der Hinweis, dass es bessere Funktionen gibt, existiert in diesem Forum schon mehrfach. Es ist aber sicher nicht notwendig, jeden (!) Thread damit zu zerpflücken, ob die vorgeschlagene Lösung syntaktisch korrekt ist.
    Jemand, der so eine Frage stellt, ist vielleicht auf damit zufrieden.

    der_Kurt schrieb:

    Bei AND: der erste und der zweite Ausdruck werden geprüft
    Bei ANDALSO: der zweite Ausdruck wird nicht mehr geprüft, wenn der erste nicht zutrifft.
    richtig, und vergleichbares gilt für Or / OrElse

    Das gibt in gewissen Situationen Geschwindigkeitsvorteile. Ist aber in diesem Beispiel irgendwie ein Overkill.
    Falsch: Ein Overkill ist etwas, was in irgendeiner Weise Aufwand bedeutet.
    Aber die moderneren logischen Operatoren zu benützen bedeutet keinerlei Aufwand (ausser dasses 4 Buchstaben mehr sind).
    Tatsächlich haben die modernen logischen Operatoren gewissermaßen zu einer Bedeutungs-Verschiebung geführt:
    And und Or sind nunmehr (fast) ausschließlich bit-Operatoren, zusammen mit Not und Xor (habich welche vergessen?).
    Nun gibts nurnoch das Not, welches eine DoppelBederutung hat, sowohl als logischer als auch als bit-Operator.
    PS: die objektorientiere Antwort auf das Problem des Threaderstellers steht in Post #4!
    jau, stimmt eiglich

    Kleiner MOD-Hinweis noch hinterher:
    Fakt 1: Man darf cstr, msgbox und Konsorten auch benutzen.
    Fakt 2: Es gibt aktuellere und umfangreichere Methoden dafür.
    Der Hinweis, dass es bessere Funktionen gibt, existiert in diesem Forum schon mehrfach. Es ist aber sicher nicht notwendig, jeden (!) Thread damit zu zerpflücken, ob die vorgeschlagene Lösung syntaktisch korrekt ist.
    Jemand, der so eine Frage stellt, ist vielleicht auf damit zufrieden.

    Hmm. Ich finds wichtig, einen guten Stil zu propagieren, und die bösen Funktionen sind schlechter Stil.

    Ich denke auch, einem gegebenen Vorschlag eine bessere Alternative gegenüberzustellen ist im Interesse sowohl des TEs als auch des "verbesserten" Antworters, der daran bisserl dazulernen kann.

    In Post#5 zeigte ich eine Verbesserung in zweifacher Hinsicht: Einerseits stellte ich die modernen logischen Operatoren vor, andererseits eine elegante Syntax-Variante, wie man einen logischen Sachverhalt auch ausdrücken kann.
    Einzeln hättich vlt. nix gepostet, aber beides zusammen schien mir den post wert.

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

    Nehmt mal dieses Beispiel für einen nicht modalen Dialog (das Or-Äquivalent):

    VB.NET-Quellcode

    1. Private dlg As Form2
    2. Private Sub XXX()
    3. If dlg Is Nothing OrElse dlg.Disposed = True Then
    4. dlg = New Form2
    5. End If
    6. dlg.Show()
    7. End Sub

    VB.NET-Quellcode

    1. If dlg Is Nothing Or dlg.Disposed = True Then
    knallt mörderisch beim Erstraufruf
    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!
    ähm der thread ist zwar erledigt, aber warum immer mit

    VB.NET-Quellcode

    1. if textbox.text <> ""

    Strings haben doch die length property:

    VB.NET-Quellcode

    1. if textbox.text.length > 0
    2. 'texbox nicht leer
    3. else
    4. 'textbox leer
    5. end if


    achja es heist if abfrage. schleifen sind total unnötig.

    MfG Atlas