Zitat von
MarcRB1975:
Nun... ich wollte das eigentlich ganz anders machen.
Hilft Dir das vieleicht weiter?
Mit Form1.Components[i] kann jedes Edit aufgespührt werden
Einfach mal ein paar Edit Felder und eine ListBox auf ein leeres Form und dann AuswahlText drauflegen.
In AuswahlText ist sofort der Text aller Edit Felder zu sehen.
Dann ListBox zuweisen und alles ist in der ListBox.
Wenn dann Edit Felder vom Form gelöscht werden, wird die ListBox automatisch aktualisiert.
Ist als kleine Anregung gedacht
Delphi-Quellcode:
unit AuswahlEdit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TAuswahlEdit =
class(TComponent)
private
{ Private-Deklarationen }
FmyListBox: TListBox;
FAuswahlText:
string;
function GetAuswahlText:
string;
procedure SetAuswahlText(
const Value:
string);
procedure SetmyListBox(
const Value: TListBox);
protected
{ Protected-Deklarationen }
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
public
{ Public-Deklarationen }
procedure GetAuswahl;
published
{ Published-Deklarationen }
property AuswahlText:
string read GetAuswahlText
write SetAuswahlText
stored False;
property myListBox: TListBox
read FmyListBox
write SetmyListBox;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Beispiele', [TAuswahlEdit]);
end;
{ TAuswahlEdit }
// Füllt die ListBox ;-)
procedure TAuswahlEdit.GetAuswahl;
var
i: Integer;
begin
if (Owner
is TForm)
and assigned(FmyListBox)
then
begin
// nur wenn Owner ein Formular ist und auch die ListBox zugewiesen wurde
FmyListBox.Items.Clear;
for i := 0
to Owner.ComponentCount - 1
do
begin
if Owner.Components[i]
is TEdit
then // ist es ein TEdit ?
begin
// Über TypeCasting kommt man an alle Eigenschaften
FmyListBox.Items.Add(
(Owner.Components[i]
as TEdit).
Name + '
= ' +
(Owner.Components[i]
as TEdit).Text
);
end;
end;
end;
end;
// Ermittelt den string mit allen Werten
function TAuswahlEdit.GetAuswahlText:
string;
var
i: Integer;
begin
Result := '
';
if (Owner
is TForm)
then
begin
for i := 0
to Owner.ComponentCount - 1
do
begin
if Owner.Components[i]
is TEdit
then
begin
Result := Result + '
, "' + (Owner.Components[i]
as TEdit).Text + '
"';
end;
end;
// Wenn min. ein Edit Feld da sind die Ersten 2 Zeichen ', ' -> weg damit
if Length(Result) > 2
then Result := copy(Result, 3, length(Result));
end;
FAuswahlText := Result;
// Ermittelter String wird in FAuswahlText gemerkt ;-)
end;
// Benachitigungen sind immer gut ;-)
procedure TAuswahlEdit.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
// Wenn ListBox entfernt wird -> Property aud nil setzen
if (Operation = opRemove)
and (AComponent = FmyListBox)
then
begin
myListBox :=
nil;
end;
// wenn Edit Feld entfernt wird, Listbox Refresh
if (Operation = opRemove)
and AComponent.ClassNameIs('
TEdit')
then
begin
Getauswahl;
end;
end;
// Das Property kann auch gesetzt werden, dann werden alle Edit Felder
// mit dem eingegebenen Wert überschrieben
procedure TAuswahlEdit.SetAuswahlText(
const Value:
string);
var
i: Integer;
begin
if FAuswahlText <> Value
then // Aber nur wenn der Wert dem gemerkten Wert abweicht (s.o.)
begin
if (Owner
is TForm)
then
begin
for i := 0
to Owner.ComponentCount - 1
do
begin
if Owner.Components[i]
is TEdit
then
begin
(Owner.Components[i]
as TEdit).Text := Value;
end;
end;
GetAuswahl;
end;
end;
end;
// diese Methode gibts nur, damit auch Getauswahl aufgerufen wird
procedure TAuswahlEdit.SetmyListBox(
const Value: TListBox);
begin
if FmyListBox <> Value
then
begin
FmyListBox := Value;
GetAuswahl;
end;
end;
end.
[edit]Kommentare im Quelltext eingefügt[/edit]