Leere TEdit felder ausschliessen



  • Salut genossen

    Ich stehe vor einem eher logischen Problem da meine Kenntnisse noch nicht so ausgereift sind. Folgendes möchte ich realisieren. Ich habe 10 TEdit Felder die immer andere werte haben und steht’s nicht immer gleich ausgefüllt. Es kann vorkommen das einmal 3 Felder text enthalten, einmal 9 Felder, einmal gar keins oder einmal 4 Felder, etc. Soweit klar? Nun möchte ich eine UND Vergleichung veranlassen. Ich habe 10 variablen vom Type string. Diese möchte ich nun als UND mit den 10 (bzw. soviel wie ausgefüllt sind) TEdit Feldern vergleichen.

    Als erstes dachte ich mir, was auch gleich meine Problemlösung wäre, dass ich alle leeren Felder für den vergleich ausschliesse. Weil wenn ich dann nur mit ausgefüllten Felder arbeite, kommt der UND vergleich ja zu gute. Jetzt ist die frage, wie ich am besten leere Felder für den vergleich mit den string variablen ausschliessen kann? Ich habe das schon mit zich if-else Anweisungen versucht, jedoch scheiterte ich. Es müsste eine einfachere Lösung geben, denke ich mal, die mein Wissensstand einfach noch nicht gelernt hat 😉

    Ich möchte also eben alle leeren TEdit Felder ausschliessen und dann die erfassten Felder mit den variablen als UND vergleichen. Wenn am ende ein echtes UND zustande kommt, möchte ich etwas machen und eben nur dann. Alles andere sollte dann false ergeben weil kein UND vergleich zustande kam. Ich hoffe ihr könnt mein Problem verstehen und habt mir ein paar Lösungsvorschläge 😋

    Thomas...



  • Hallo,
    du kannst mir Edit->Text == "" prüfen, ob ein TEdit keinen Text enthält und deine Formel dann dementsprechend anpassen.



  • Hallo,

    Das weiss ich aber genau so habe ich das versucht und lauter if-else Blöcke, daran scheiterte ich aber eben... Es muss einen anderen weg geben und ich hoffe jemand kann mir das erklären oder als Beispiel demonstrieren weil so wie du das eben geschrieben hast, habe ich es leider nicht hinbekommen.



  • Ich nochmals...
    Wiegesgat, meiner meinung nach wäre es wohl das beste von anfang an leere felder auszuschliessen. Gut, das könnte ich ja durchaus machen.

    if(Edit1->Text == "")
    {
    
    }
    if(Edit2->Text == "")
    {
    
    }
    if(Edit3->Text == "")
    {
    
    }
    if(Edit3->Text == "")
    {
    
    }
    //<<<---- etc...
    //<<<---- etc...
    //<<<---- etc...
    
    [pseudo_code]
    
    Wie_nun_nur_die_ausgefüllten_felder_vergleichen();
    
    [pseudo_code]
    


  • Die Inhalte der Edits fragst du am besten in einer Schleife ab (siehe FAQ, "Komponenten - Zugriff nicht über Namen"). Je nachdem, wie dein Vergleich konkret aussehen soll, kannst du schon in der Schleife prüfen, ob die Bedingungen erfüllt sind, oder du schreibst die Edit-Inhalte für die weitere Verwendung z.B. in eine StringList.



  • Jansen, das mit der TStringList ist glaube ich der perfekte Lösungsansatz! 🕶

    So kann ja leere TEdits ausschliessen und nur erfasste in die TStringListe hinzufügen. Dann kann ich die Liste mittels einer schleife vergleichen. Leere TStringList items sind ja somit ausgeschlossen. 👍

    Werde das später gleich testen und melde mich ggf. wieder.



  • So, habe es geschafft! Danke Jansen für den tipp mit der TStringListe 👍
    Die Lösung sieht so aus:

    1. Alle leeren Felder ausschliessen und die erfassten in eine TStringList hinzufügen. Durch den Count von TStringList weis ich nun die Anzahl, wie viele Übereinstimmungen getroffen werden muss, damit es ein echtes UND ergibt.

    2. Nun fahre ich alle meine 10 variablen mit einer if (ohne else) Anweisung ab, und vergleiche diese variablen mit allen TEdit Feldern. Sollte eine Übereinstimmung zutreffen, wird eine variable vom Typ int inkrementiert.

    3. Sind alle 10 if abfragen durchlaufen und die inkrementierte int variable ist gleich Count von TStringList, weis ich das es ein echtes UND ergab und ich somit weitere Aktionen ausführen kann. 🕶



  • 😕
    *rofl*
    🙄



  • Nachdem du dir jetzt eine Lösung erarbeitet hast können wir uns ja daran machen, die zu verfeinern. Hier mal ein Ansatz:

    [cpp] TStringList *list = new TStringList();
    list->CommaText = "bla,blub,bleh,piep,pup"; // Liste mit deinen Variablen

    for (int i = 0; i < Form1->ComponentCount; i++) // Komponenten abklappern
    {
    TEdit *edit = dynamic_cast<TEdit *>(Form1->Components[i]);
    if (edit != NULL && edit->Text != "") // Prüfen, ob ein TEdit, wenn ja, ob mit Inhalt
    if(list->IndexOf(edit->Text) == -1) // Prüfen, ob Inhalt nicht in Variablenliste enthalten
    {
    ShowMessage("'" + edit->Text + "' ist nicht in der Liste enthalten.");
    break; // dann abbrechen
    }
    } // ansonsten weiter prüfen
    delete list;[/cpp]



  • Klingt gut.
    Wäre meine Lösung aber akzeptabel? Würde diese drum gerne so belassen. Jedoch würde ich gerne deine Meinung dazu hören, ob meine Lösung soweit ok ist? Ich denke verstanden hast du sie sicher 😋



  • "Akzeptabel" ist relativ. Wenn es dir reicht, dass es läuft, dann lass' es so.
    Wenn du an halbwegs elegantem, flexibel verwendbarem Code interessiert bist, dann gibt es sicher etliche Dinge zu verbessern.

    Ein Denkanstoss: was passiert, wenn du statt 10 Edits auf einmal 20, oder nur noch 5 benötigst?


Anmelden zum Antworten