![]() |
Text eines zur Laufzeit erstellten Editfeldes
Hallo, ich habe folgendes Problem:
Ich habe mehrere Editfelder, die zur Laufzeit erstellt werden. Diesen möchte ich sowohl ein OnChange zuweisen, in dem ich die Texte auswerten kann und in andere zur Laufzeit erstellten Objekten den Text ändern kann.
Delphi-Quellcode:
var Eingabe:TEdit; procedure TForm1.Erstellen; begin Eingabe:=Tedit.create(Self); Eingabe.parent:=TForm1; Eingabe.OnChange:=EditsChange; end; procedure TForm1.EditsChange(Sender:TObject); var text, neu:string; begin //Ich komme zwar hier an, doch ich kann nichts auslesen, da es sich um ein TObject handelt. text:=Sender.text; neu:=text+'asd'; //Hier möchte ich den Text der anderen Objekte ändern (Namen, Typ, Position etc. habe ich alles und lässt sich //aus den Werten von Sender errechnen AnderesEdit.text:=neu; AnderesEdit2.text:=neu+text; //usw. end; Wie kann ich es verwirklichen, ein TObject in ein TEdit "umzuwandeln" und ein Objekt nur über einen in einer Variable gespeicherten Namen anzusprechen? Liebe Grüße! |
Re: Text eines zur Laufzeit erstellten Editfeldes
Delphi-Quellcode:
text:=(Sender as TEdit).text;
|
Re: Text eines zur Laufzeit erstellten Editfeldes
Ok, vielen Dank.
Wenn ich jetzt noch bei zur Laufzeit erstellten Objekten des Text auslesen will, kann ich das dann auch auf diese Weise machen?
Delphi-Quellcode:
//Setzt den Inhalt der Prozedur oben vorraus procedure TForm1.EditChange(Sender:TObject); var nr,name, anderername:string; begin //Name der Edits setzt sich wie folgt zusammen: 'Name'+IntToStr(Nummer), wobei es 4 verschiedene Namen gibt //Also Nummer des Senders auslesen nr:=name; delete(Nr,0,Length(NR)-1); //Und jetzt das Edit mit dem Namen 'XYZ'+nr anderername:='Feld'+nr; //Das gewünschte Feld wieder in die TEdit Variable Feld laden??? Feld:=(Anderername as TEdit); end; Liebe Grüße! |
Re: Text eines zur Laufzeit erstellten Editfeldes
Nein. Ich sehe aber auch keinen Sinn darin. Was hast du genau vor?
Vielleicht Feld:=(FindComponent( Anderername) as TEdit); |
Re: Text eines zur Laufzeit erstellten Editfeldes
Ich möchte den Namen von Sender ermitteln (Kein Problem) und dann je nachdem welcher Name es ist, in einem anderen Feld eine Ausgabe machen. Da aber alle diese Felder noch nicht beim Programmstart vorhanden sind, hab ich halt so meine Probleme damit.
Wenn ich bei deiner Methode dann schreibe showmessage(Feld.name); dann kommt eine Fehlermeldung, eine Zugriffsverletzung. Ohne diese Zeile scheint es aber soweit zuklappen... Edit: Wenn ich schreibe Feld.text dann klappt es... Doch ich kann diesen Wert nicht verändern. Ich habe eingegeben Feld.text:='Hallo'; doch es geschieht nichts... |
Re: Text eines zur Laufzeit erstellten Editfeldes
Dass du wahrscheinlich mit "FindComponent" weiterkommst, hat dir ja mkinzler schon geschrieben. Aber dein Codeschnipsel ist ansonsten auch sehr komisch:
Delphi-Quellcode:
Du fängst damit an, dass du der lokalen Variable "nr" den Wert der lokalen Variable "name" zuweist, die übrigens nicht initialisiert ist. Also erzeugst du eigentlich ziemliches Chaos...? :)
var nr,name, anderername:string;
begin nr:=name; Danach löschst du, glaube ich, alles bis auf das letzte Zeichen... Meinst du vielleicht eigentlich sowas hier:
Delphi-Quellcode:
Das sollte dir das letzte Zeichen des Namens der Edit-Komponente in die Variable "nr" schreiben.
nr:=(sender as TEdit).name[length((sender as TEdit).name)];
Bis denn Bommel |
Re: Text eines zur Laufzeit erstellten Editfeldes
Was für einen Typ hat Feld?
|
Re: Text eines zur Laufzeit erstellten Editfeldes
Zitat:
Bis denn Bommel |
Re: Text eines zur Laufzeit erstellten Editfeldes
Oh: Feld=Eingabe
Ich möchte sowohl den Teil "Name" haben, als auch den Teil 'Nummer'. Die ermittel ich dann, indem ich den Namen des Edits zweimal speicher und dann den nicht erwünschten Teil lösche. Ich kann auch versuchen, den Namen einmal festzulegen, sodass das Feld zu 100% existiert. Die Ermittlung des Namens habe ich auch noch nicht fertig (Zweistellige Zahlen werden z.B. nicht berücksichtigt...) Wenn ich den Namen richtig ermitteln kann, klappt es auch. Ich denke damit wäre das Problem gelöst, danke! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz