![]() |
Beliebiges Edit ändern
Hallo,
ich habe beliebig viele Editfelder und zu jedem einen RadioButton. Ich möchte, dass 'Inhalt' in das Edit geschrieben wird, dessen RadioButton angeklickt ist. Ist es möglich das ohne ein Ausschreiben mit 'if' hinzubekommen, wenn ja, ist das auch für eine unbegrenzte Anzahl Edits machbar? Zur besseren Verständlichkeit ist hier der Quellcode, mit dem die Edits erstellt werden:
Delphi-Quellcode:
Es würde mir schon reichen, wenn man schreibt, wie man das Edit der Nr '?' bearbeiten kann, wenn man Nr zur Laufzeit eingeben kann.
unit Ausgabe;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFrame1 = class(TFrame) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frame1:Tframe1; implementation {$R *.dfm} uses HauptUnit; procedure TFrame1.Button1Click(Sender: TObject); VAR I:Integer; newEdit, newEdit2:TEdit; newRadioButton:TRadioButton; BEGIN I:=Strtoint(HauptUnit.Form1.EditNR.text); newEdit2 := TEdit.Create(Self); newEdit2.Name := 'eCode'+IntToStr(I); newEdit2.Parent:=Self; newEdit2.Visible:=false; newRadioButton:=TRadioButton.Create(Self); newRadioButton.Name:='Markiere'+InttoStr(I); newRadioButton.Parent:=Self; newRadioButton.top:= I * 30 + 8; newRadioButton.Left:=4; newRadioButton.checked:=true; newRadioButton.caption:=''; newRadioButton.Visible:=true; newRadioButton.Show; newEdit := TEdit.Create(Self); newEdit.Name := 'eAusgabe'+IntToStr(I); newEdit.Parent := Self; newEdit.Top := I * 30 + 8; {Abstand in Abhängikeit von I} newEdit.Left := 30; newEdit.Width := 500; newEdit.Ctl3D:=false; newEdit.borderstyle:=bsnone; newEdit.ReadOnly:=true; newEdit.Text:=''; newEdit.Show; HauptUnit.Form1.EditNR.text:=inttostr(I+1); end; end. Vielen Dank für alles Nachdenken! Treuergebenst Samufi |
Re: Beliebiges Edit ändern
Such mal nach FindComponent().
|
Re: Beliebiges Edit ändern
Danek, das hat schon geholfen. Wenn ich das jetzt auf einem Frame machen will sagt Delphi mir immer "Operator oder Semikolon fehlt". Was muss ich anders machen? Oder geht das in Frames nicht?
Delphi-Quellcode:
procedure TFrame1.FindComponentClick(Sender: TObject);
var I:Integer; begin I:=1; TEdit(Findcomponent('edit'+inttostr(I))).text:='Text'; end; |
Re: Beliebiges Edit ändern
Hast Du einen Button namens FindComponent deklariert? Der Prozedurkopf sieht zumindest danach aus.
|
Re: Beliebiges Edit ändern
Hi,
verzeih mir, wenn ich die Syntax im Folgenden falsch mache, aber wäre es nicht viel sinnvoller, wenn du diese Komponenten in einem Array verwalten würdest? Das erspart ein langsames "FindComponent", da nicht erst nach den Komponenten gesucht werden muss.
Delphi-Quellcode:
So gehören die 3 Komponenten auch "fest" zusammen. Das kannst du dann leicht in einer Schleife durchlaufen:
type TMyComponents = record
MyEdit1: TEdit; MyEdit2: TEdit; MyRedioBtn: TRadioButton; end; var MyComponentsArray = array of TMyComponents; const COMPONENTS_NUM = 20; // ... var i: Integer; begin SetLength(MyComponentsArray, COMPONENTS_NUM); // Erzeugen der Komponenten for i := 0 to COMPONENTS_NUM - 1 do begin MyComponentsArray[i].MyEdit1 := TEdit.Create(Self); // ... MyComponentsArray[i].MyEdit2 := TEdit.Create(Self); // ... MyComponentsArray[i].MyRadioBtn := TRadioButton.Create(Self); // ... end; end;
Delphi-Quellcode:
Vielleicht geht das auch gar nicht so, aber es könnte sein, dass es tut. :lol: Natürlich könnte man das auch in eine kleine Klasse packen.
for i := 0 to COMPONENTS_NUM - 1 do
begin if MyComponentsArray[i].MyRadioBtn.Checked then MyComponentsArray[i].MyEdit1.Text := 'Inhalt'; end; Grüße |
Re: Beliebiges Edit ändern
Aber Du hast ja auch wieder eine Schleife, wo soll jetzt der Vorteil liegen?
|
Re: Beliebiges Edit ändern
Zitat:
Vorteile, die ich sehe sind, - dass RadioButton und Edit nicht unbedingt den gleichen Index im Namen haben müssen - dass weitere Radiobuttons und Edits, die nicht relevant sind, auch nicht abgefragt werden - ich finde auch, dass man mit dem Record flexibler ist, wenn man später weitere Komponeneten zuordnen möchte |
Re: Beliebiges Edit ändern
Wäre es dann nicht sinnvoller, sich einen Cracker/Class Helper zu schreiben, der die Objektreferenzen enthält?
[edit]Hab das gerade einmal versucht:
Delphi-Quellcode:
Das würde mit dynamisch erzeugten Komponenten dann genauso gehen.[/edit]
unit Test;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TRadioButton = class(StdCtrls.TRadioButton) private FEdit: TEdit; public property Edit: TEdit read FEdit write FEdit; end; TfrmTestMain = class(TForm) RadioButton1: TRadioButton; Edit1: TEdit; RadioButton2: TRadioButton; Edit2: TEdit; RadioButton3: TRadioButton; Edit3: TEdit; RadioButton4: TRadioButton; Edit4: TEdit; RadioButton5: TRadioButton; Edit5: TEdit; procedure FormCreate(Sender: TObject); procedure RadioButton1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frmTestMain: TfrmTestMain; implementation {$R *.dfm} procedure TfrmTestMain.FormCreate(Sender: TObject); begin RadioButton1.Edit := Edit1; RadioButton2.Edit := Edit2; RadioButton3.Edit := Edit3; RadioButton4.Edit := Edit4; RadioButton5.Edit := Edit5; end; procedure TfrmTestMain.RadioButton1Click(Sender: TObject); begin if Sender is TRadioButton then TRadioButton(Sender).Edit.Text := 'Hallo Welt'; end; end. |
Re: Beliebiges Edit ändern
Vielen Dank! Ich hab das jetzt zwar mit einer for-Schleife gemacht, da ich mich mit arrays nicht wirklich auskenne, aber es funktioniert ja trotzdem. So weit bin ich noch nicht, dass mir der Stil, bzw. die Schnelligkeit in dem Maße wichtig ist. Aber dennoch: Danke für den Einwurf! Was würde ich bloß ohne euch tun?! :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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