Fehler beim Vergleich der Editlänge



  • Guten Tag 😉
    Auf meiner Form sind ein Button und 3 Editfelder: Edit[0], Edit[1], Edit[2].
    Es soll geprüft werden, ob alle Felder die selbe Länge haben.
    Die Strings x1 und x2 habe ich nur zur Fehlersuche drin.
    Egal ob alle Felder die gleiche Länge haben oder nicht, die MessageBox wird immer angezeigt.

    Wenn ich in jedem Editfeld ein "a" eintrage, geht der erste Durchgang der for-Schleife glatt (1. und 2. Editfeld prüfen), aber dann gibt es beim prüfen vom 2. und 3. Feld den Fehler, dass x1="0" ist und x2="1".

    Weiß jemand was ich falsch mache?

    int Editanzahl=3;
      bool ungleich=false;
      for(int x=1; x<Editanzahl; x++)
      {
        if(Edit[x]->Text.Length() != Edit[x-1]->Text.Length())
        {
          String x1=String(Edit[x]->Text.Length());
          String x2=String(Edit[x-1]->Text.Length());
          ungleich=true;
        }
      }
    
      if(ungleich)
        Application->MessageBox("Jedes Feld muss die selbe Anzahl an " \
        "Zeichen enthalten.","Fehler",0+16);
    

    Danke



  • Ist Edit ordnungsgemäß deklariert und initialisert?



  • Das ist der Code-Teil der die Editfelder erstellt:

    //Editanzahl ist gleich 3
          TEdit *Edit[20];
          for(int y=0; y<Editanzahl; y++)
          {
            Edit[y] = new TEdit(this);
            Edit[y]->Top = 40 + (x * 25);
            Edit[y]->Left = 8;
            Edit[y]->Height = 21;
            Edit[y]->Width = 185;
            Edit[y]->Font->Name = "Lucida Console";
            Edit[y]->Parent = this;
          }
    


  • Hmm, ungleich wird nicht true gesetzt, wenn alle Felder leer sind, die letzten beiden, oder nur das letzte.
    Jedoch nicht, wenn z.b. nur das erste oder die ersten beiden leer sind.



  • Du prüft schließlich nur auf das vorige [x-1], nicht jedoch auf alle Felder.



  • Aber durch die for Schleife wird erst
    Edit[1] mit Edit[0] verglichen, dann
    Edit[2] mit Edit[1]

    Falls E1 und E0 gleich sind und dann das schon geprüfte E1 mit E2 verglichen wird, ist das wie eine Kette.

    Bsp.
    E0 1 Zeichen
    E1 2 Zeichen
    E2 2 Zeichen, ich muss hier ja nicht wieder auf E0 prüfen weil bereits klar ist, dass nicht alle gleichlang sind.



  • irgendwie kann ich deinen Fehler nicht nachvollziehen, dein Quellcode funktioniert doch einwandfrei 😕



  • Prüf' mal gegen, ob das bei Dir läuft (BCB 6). Wenn ja, dann wandele es schrittweise in Dein Projekt um.

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <AppEvnts.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
    
    private:	// Anwender-Deklarationen
    
        const int Editanzahl;
        TEdit *Edit[20];
    
    public:		// Anwender-Deklarationen
    
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner), Editanzahl(3)
    {
          //Editanzahl ist gleich 3
          const int x = 0;
    
          for(int y=0; y<Editanzahl; y++)
          {
            Edit[y] = new TEdit(this);
            Edit[y]->Top = 40 + (y * 25);
            Edit[y]->Left = 8;
            Edit[y]->Height = 21;
            Edit[y]->Width = 185;
            Edit[y]->Font->Name = "Lucida Console";
            Edit[y]->Parent = this;
          }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
      bool ungleich=false;
      for(int x=1; x<Editanzahl; x++)
      {
        if(Edit[x]->Text.Length() != Edit[x-1]->Text.Length())
        {
          String x1=String(Edit[x]->Text.Length());
          String x2=String(Edit[x-1]->Text.Length());
          ungleich=true;
        }
      }
    
      if(ungleich)
        Application->MessageBox("Jedes Feld muss die selbe Anzahl an " \
        "Zeichen enthalten.","Fehler",0+16);
    
    }
    //---------------------------------------------------------------------------
    

Log in to reply