edit dynamisch auslesen



  • nabend zusammen,

    ich möchte folgendes machen:

    ich habe z.b. 8 editfelder. nenne ich mal txt_mail1 - 8. nun will ich die wärend der laufzeit abfragen. dafür will ich ne schleife nehmen: for(int i = 1; ....). wie kann ich den editfeldern den wert i zuweisen? 😞
    beispiel:

    AnsiString sperr1 = txt_mail1->Text;
    

    wie bekomme ich sperr1 und txt_mail1 in der schleife dynamisch zugewiesen?

    meine also wenn i = 2 dann auch sperr2 bzw txt_mail2 genommen wird.

    sorry, irgendwie z.Z. nicht ganz auf der höhe





  • hi rean,

    danke für den tipp. hat mir erst mal weiter geholfen.

    jetzt stehe ich allerdings vor dem problem wie ich den inhalt meiner editfelder auslesen kann. ich brauche den inhalt für eine spätere sql abfrage.

    try
    	{
    		for(int i = 1; i < frm_sperren->ComponentCount; i++)
    		{
    			if(frm_sperren->Components[i]->ClassNameIs("TEdit"))
    			{
    				AnsiString sperr = frm_sperren->Components[i]->Name; //hier habe ich nur den namen des editfeldes brauche aber den inhalt
    
    			  /*	query_sperr->Close();
    				query_sperr->SQL->Clear();
    				query_sperr->SQL->Add("SELECT * from adressen");
    				query_sperr->SQL->Add("WHERE email LIKE '" + sperr + "'");
    				query_sperr->Open();
    				query_sperr->Close();
    				query_sperr->SQL->Clear();
    				query_sperr->SQL->Add("UPDATE adressen SET");
    				query_sperr->SQL->Add("sperr = 1");
    				query_sperr->SQL->Add("WHERE email LIKE '" + sperr + "'");
    				query_sperr->ExecSQL();     */
    			}
    		}
    
    	} catch (...)
    	{
    
    	}
    


  • in dem Beitrag des Links steht ja drin, wie man mit dynamic_cast z.B. die Caption neu setzt, also verwende das doch einfach um die Eigenschaft Text des Edits auszulesen



  • verwende das doch einfach um die Eigenschaft Text des Edits auszulesen

    😃

    na ja, das mit dem einfach... *g

    bin jetzt mal so weit gekommen:

    for(int i = 1; i < frm_sperren->ComponentCount; i++)
    		{
    			if(frm_sperren->Components[i]->ClassNameIs("TEdit"))
    			{
    				TEdit *sperr = new TEdit(this);
    				//sperr->Parent = this; <---- wenn ich parent angebe hängt sich programm weg
    				sperr->Text = dynamic_cast<TEdit*>(frm_sperren->Components[i])->Text;
    				Label2->Caption = sperr->Text;
    				sperr->Clear();
    .....
    

    wenn ich das ausführe bekome ich die meldung das " Element '' hat kein übergeordnetes fenster". drücke ich die exception weg dann bekomme ich im label den wert aus dem ersten edit feld angezeigt.
    gebe ich sperr->Parent = this; an, dann hängt sich das prog auf.

    irgendwie mach ich grundlegend was verkehrt 😞
    im inet werde ich auch nicht richtig fündig.



  • Hallo

    Dein Vorgehen ist auch völlig durcheinander. Wenn du den Wert eines bestehenden Controls auslesen willst, warum erstellst du dann ein neues?

    TEdit* CurEdit;
    for(int i = 1; i < frm_sperren->ComponentCount; i++)
    {
      // Versuchen das aktuelle Control in ein Edit zu casten
      if ((CurEdit = dynamic_cast<TEdit*>(frm_sperren->Components[i]))
      {
        // Wenn casten möglich, den Wert des Edits als MessageBox ausgeben, oder etwas anderes machen
        Application->MessageBox(CurEdit->Text.c_str(), "Edit-Wert", MB_OK);
      }
    }
    

    Allerdings halte ich solche Control-Suchspiele für ineffizient. Wenn du Controls mit besonderer Bedeutung hast, die du später zur Laufzeit öfters brauchst, solltest du diese Control in eigenen Pointer-Membern des Forms speichern. Hast du mehrere Controls deselben Typs mit gleicher Bedeutung, dann eben ein Array.
    So wie es auch in der BCB-FAQ im Abschnitt Komponenten benutzen erklärt wird.

    bis bald
    akari



  • hallo akari,

    herzlichen dank. wieder mal etwas schlauer geworden 🙂
    für meinen verwendungszweck reicht das so. werde mir aber mal die andere variante zu gemüte führen.


Anmelden zum Antworten