Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Editfeld aus Schleifenvariable?
Henneberg - So 11.03.12 20:17
Titel: Editfeld aus Schleifenvariable?
Ausgangssituation ich habe 4 Edits in denen jeweils 4 zahlen stehen. Nun sollen siese Zahlen an ihren stellen in ein 16 Felder langes Array kommen
dafür ich will zwei for-Schleifen ineinandergeschachtelt durchlaufen lassen. Die erste von i=1 zu 4 und die andere ii=1 zu 4. Jetzt will ich in der zweiten prozedur nun erst ein Edit abklappern. dann das nächste usw. Ich hatte mir das so gedacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for I := 1 to 4 do begin for ii := 1 to 16 do begin Edit(I).Text end; end; |
Also es soll immer das Edit genommen werden mit dem Wert der ersten Zählvariable. So wie es oben steht funktioniert es nicht. Hat jemand eine Idee?
PS: Das ist mein erster Post hier also bitte seid gnädig mit mir^^
Moderiert von
Martok: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 11.03.2012 um 19:36
haentschman - So 11.03.12 20:24
Hallo...
Stichworte:
- FindComponent
- Edits in einer ObjectList ablegen und über den Index abarbeiten
:wave:
Henneberg - So 11.03.12 20:39
:S bin leider noch ein neuling. Könnten sie das bitte etwas genauer erklären?
jaenicke - So 11.03.12 20:45
Erstens: Wir duzen uns hier im Forum ;-)
Zweitens: FindComponent eingeben, F1 drücken ;-)
In der Dokumentation gibt es sogar ein Beispiel, das ziemlich exakt das macht was du vorhast...
http://docwiki.embarcadero.com/CodeSamples/en/FindComponent_(Delphi)
Wobei du dir das with dort nicht abschauen solltest, das macht alles nur unübersichtlich. Aber du siehst dort wie FindComponent benutzt wird.
Henneberg - So 11.03.12 21:02
ok :)
also ich bin derzeit soweiz und habe nur noch das als Kommentar abgegebene Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); var Feld:Array[1..16] of Integer; I,ii: Integer; edittext:string; const NamePrefix = 'MyEdit'; begin for I := 1 to 4 do begin for ii := 1 to 4 do begin TEdit.Create(Self).Name := NamePrefix + IntToStr(i); edittext:=TEdit(FindComponent(NamePrefix + IntToStr(i))); Feld[i*ii]:=strtoint(edittext[5]); end; end;
for ii := 1 to 16 do Listbox1.Items.Add(IntToStr(Feld[iii]));
end; |
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - So 11.03.12 21:36
Die Meldung sagt doch schon was das Problem ist. Die Variable edittext ist ein String. Deshalb kannst du da nicht ein ganzes Editfeld hineinlegen.
Das ist als ob du eine Tiefkühltruhe hast und eine Lieferung per LKW bekommst. Du versuchst nun den ganzen LKW in die Kühltruhe zu legen. Stattdessen musst du den Inhalt herausnehmen und in die Kühltruhe legen.
Analog musst du den Text aus dem Editfeld herausnehmen und diesen in die Variable legen.
Delphi-Quelltext
1: 2: 3: 4:
| edittext := MyEdit; edittext := MyEdit.Text; |
Davon abgesehen scheint dir nicht wirklich klar zu sein was du da tust. In der Zeile mit TEdit.Create wird ein neues Editfeld erzeugt. Das willst du ja wohl kaum, oder? Heißt: Diese Zeile brauchst du nicht.
Henneberg - So 11.03.12 21:51
Tut mir leid ich habe eben nur mein bisheriges Schul Delphi und diese Aufgabe war eine zusatzaufgabe. Deswegen arbeite ich derzeit nach dem Motto: Einfugen testen verstehen. ;)
Tut mit Leid ich vestehe deine Antwort immer noch nicht. Blicke da noch nicht so durch :S
jaenicke - So 11.03.12 22:42
Leg doch einfach mal in einem neuen Projekt nur ein Editfeld und einen Button auf das Formular und probiere nur FindComponent aus. In den Buttonklick kannst du schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var FoundEditField: TEdit; begin FoundEditField := FindComponent('Edit1') as TEdit; FoundEditField.Text := 'Ein Text'; end; |
Damit suchst du das Editfeld mit dem Namen Edit1, legst das in FoundEditField und setzt dann den Text darin.
Henneberg - Di 13.03.12 21:10
Aber wie mach ich das nun das er das editfeld nimmt mit dem index der schleifenvariablen?
bummi - Di 13.03.12 23:22
Delphi-Quelltext
1:
| FoundEditField := FindComponent('Edit' + IntToStr(i)) as TEdit; |
Xion - Mi 14.03.12 01:57
Ich möchte mal anmerken, dass ich mit FindComponent immer ziemlich unzufrieden war, da das ziemlich langsam ist.
Da man ja ohnehin keine x Edits platzieren will, mache ich das meist durch Erstellung zur Laufzeit (wie oben schon angedeuted):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Edits: array of TEdit; [...] procedure TForm1.CreateEdits; var E: integer; begin SetLength(Edits, 1000); for E:= 0 to High(Edits) do begin Edits[E]:=TEdit.Create(Form1); Edits[E].Parent:=Form1; Edits[E].Text:=inttostr(E); Eidts[E].Top:=42*E; end; end; |
Genau wie die Schleife zeigt kannst du natürlich auch weitere Schleifen nutzen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!