komponenten name + variablen?



  • hallo an alle, ich wollte einmal wissen, ob ich folgenden code auch kürzer schreiben kann:

    (Situation 4 Edit felder von Edit1 bis Edit4)

    for(x=1;x<=4;x++)
      {
          if(x==1)
          {
           i_block[x]=StrToInt(Edit1->Text);
          }
    
            if(x==2)
            {
              i_block[x]=StrToInt(Edit2->Text);
            }
    
              if(x==3)
              {
                i_block[x]=StrToInt(Edit3->Text);
              }
    
               if(x==4)
               {
                 i_block[x]=StrToInt(Edit4->Text);
               }
       }
    

    wie kann ich das machen, das er hinter den Edit die var x angenommen wird? bsp so: 8was nicht funtzt

    for(x=1;x<=4;x++)
      {
    
           i_block[x]=StrToInt(Edit[x]->Text);
           //oder
           i_block[x]=StrToInt(Edit"+x+"->Text);
    
       }
    

    auf eine antwort würde ich mich sehr freuen und währe auch sehr dankbar!



  • Siehe FAQ im Abschnitt "Komponenten benutzen": "zur Laufzeit erstellen", "Zugriff nicht über Namen" und "dynamische Arrays".



  • Hallo Thorsten,
    Jansen hat ja bereits auf dein Prolem geantwortet aber ich habe einen Kommentar zu deinem bisherigen Code. Meinst Du nicht, das die Verwendung von else if besser ist als die if Bedingungen, da der Wert von x ja innerhalb der Bedingungen nicht verändert wird und so nur unnötig viele Bedingungen überprüft werden.

    Gruß Alex



  • Da muss ich doch noch nen Kommentar zum Kommentar abgeben: Ich denke ein Switch..case-Konstrukt wäre hier noch vielpassender... allerdings ist Jansens Lösungsansatz wesentlich besser...



  • jo vielen dank hat funktioniert !

    Edit habe es folgender maßen nun gemacht:

    //Dynamische Erzeugung der TextBoxen
       int l=112; //Start der linken position
    
       txt_block.Length=5;  //anzahl der textfelder (5=4)
    
       for(int i=1;i<5;i++)
       {
         txt_block[i] = new TEdit(this);  //neues edit
         txt_block[i]->Parent = this;     //parent angabe
         txt_block[i]->Left = l;          //linke position
         txt_block[i]->Width = 33;        //breite
         txt_block[i]->Top = 48;          //top position
         txt_block[i]->MaxLength = 3;     //maximale eingabe länge
         txt_block[i]->Show();            //textfeld anzeigen
    
         l=l+48;   //linke postion um 48 erhöhen
       }
    

    im klick ereigniss

    i_block[x]=StrToInt(txt_block[x]->Text);
    


  • Hallo Unix
    Kommentar die dritte:
    http://www.dotnet-hb.de/default.aspx?page=47&id=406
    Ich weiß es ist Haarspalterei und natürlich ist die Lösung von Jansen die schönste.

    Gruß Alex

    PS: Wenn ich zu weit vom Thema abkomme schreit mich einfach an.


Anmelden zum Antworten