AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

edit1.....edit20 nacheinander zuweisen?

Offene Frage von "imag"
Ein Thema von imag · begonnen am 31. Jul 2008 · letzter Beitrag vom 4. Aug 2008
Antwort Antwort
imag

Registriert seit: 1. Mai 2008
12 Beiträge
 
Delphi 2007 Professional
 
#1

edit1.....edit20 nacheinander zuweisen?

  Alt 31. Jul 2008, 00:25
So nach langer ergebnisloser Suche stelle ich die Frage nun hier.

Folgende Situation:
Ich habe ein Formular mit nummerierten Edits, nennen wir sie mal input1 bis input20.
Wie kann ich jetzt, ohne
input1.text:='asdasd';
input2.text:='asdasd';
.........

jedes Feld nacheinander ansprechen (am besten mit einer while oder for Schleife)?

Danke fuer jede Hilfe =)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: edit1.....edit20 nacheinander zuweisen?

  Alt 31. Jul 2008, 01:10
Immer wenn man viele Edit-Felder gleichartig ansprechen will, sollte man sich fragen,
ob TEdit hier überhaupt die beste Lösung ist.
Mit einen StringGrid kann man sehr viele Daten anzeigen und editieren.
Ein Vorteil beim StringGrid ist, dass man die Daten bequem in einer Schleife lesen & schreiben kann.

Also erzähl doch mal, was für Daten angezeigt/editiert werden sollen.
  Mit Zitat antworten Zitat
Benutzerbild von Kalakmul
Kalakmul

Registriert seit: 11. Apr 2008
27 Beiträge
 
Delphi 2010 Professional
 
#3

Re: edit1.....edit20 nacheinander zuweisen?

  Alt 31. Jul 2008, 01:38
Eine prinzipielle Lösung ist die Verwendung des FindComponent-Befehls.

Etwa so:

Delphi-Quellcode:
var
  AEdit: TEdit;
  Nr: Integer;

begin
  for Nr := 1 to 20 do
  begin
    AEdit := TEdit(FindComponent('input' + IntToStr(Nr)));
    AEdit.Text := 'asdasd';
  end;
end;
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: edit1.....edit20 nacheinander zuweisen?

  Alt 31. Jul 2008, 02:18
Wenn es Edits sein sollen, und nicht wie vorgeschlagen eine Form von Liste oder Grid, und sehr oft etwas zugewiesen werden soll, dann kann es sich auch lohnen die Edits in einem array of TEdit zu "sammeln", statt das recht kostspielige FindComponent zu benutzen. Zumal da du dann die Edits auch sinnvoll und beliebig benennen kannst fände ich das schon ästhetischer
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: edit1.....edit20 nacheinander zuweisen?

  Alt 31. Jul 2008, 06:51
Moin,

das mit dem Array ist eine gute Idee:

Delphi-Quellcode:
procedure SetEditText(owner: TComponent; const value: string); overload;
var
  i: Integer;
begin
  with owner do
    for i := 0 to Pred(ComponentCount) do
      if Components[i] is TEdit then
        TEdit(Components[i]).Text := value;
end;

procedure SetEditText(parent: TWinControl; const value: string); overload;
var
  i: Integer;
begin
  with parent do
    for i := 0 to Pred(ControlCount) do
      if Controls[i] is TEdit then
        TEdit(Controls[i]).Text := value;
end;

procedure TDemoForm.OwnerButtonClick(Sender: TObject);
begin
  with Sender as TButton do
    SetEditText(TComponent(self), Caption);
end;

procedure TDemoForm.ParentButtonClick(Sender: TObject);
begin
  with Sender as TButton do
    SetEditText(TWinControl(self), Caption);
end;
Zum Testen einfach ein paar Edits auf der Form verteilen, davon ein paar auf ein Panel legen.

Grüße vom marabu
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#6

Re: edit1.....edit20 nacheinander zuweisen?

  Alt 4. Aug 2008, 13:38
Bei der Methode kann man aber schlecht auswählen welche Edits alle den gleichen wert haben sollen. Evlt. soll ja nicht alle Edits sondern nur bestimmte Berücksichtig werden.
Hier mein Vorschlag:
Delphi-Quellcode:

Var
  Items:array [0..5] of TEdit
...
procedure SetEdits(aIndex:Integer; aEdit:TEdit);
var
  i:Integer;
begin
  for i:=0 to 5 do begin
    Items[i]:=aEdit;
  end; // for
end;

// Beispiel
procedure InitEditArray;
begin
  items[0]:=Edit1;
  items[1]:=Edit5;
  items[2]:=Edit7;
  ....
end;
Ist zwar nicht so sauber, aber auch eine Lösung.
So kann genau gewählt werden, welche Edits mit alle Edits gemeint sind.
Wenn es noch einfacher sein soll, dann würde ich eine TObjectListe nehmen.
Achja in SetEdits verwende ich einfach Pointer. Also wird kein Speicher verschwendet bzw. nicht so viel.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz