Mal mein Ansatz als Code:
Delphi-Quellcode:
function CheckDuplicates(ParentControl: TWinControl; var WrongEdit: TEdit): Boolean;
var
i,n: Integer;
ba: array of Boolean;
begin
Result := False;
n := 0;
// Edits zaehlen
for i := 0 to Pred(ParentControl.ControlCount) do
if ParentControl.Controls[i].InheritsFrom(TEdit) then
Inc(n);
// Keine Edits? Dann Ende.
if n = 0 then exit;
// ByteArray setzen
SetLength(ba, n);
// Edits checken
for i := 0 to Pred(ParentControl.ControlCount) do
if ParentControl.Controls[i].InheritsFrom(TEdit) then
begin
// Zahl auslesen, wenn keine Zahl dann 0, wenn 0 dann ignorieren
n := StrToIntDef((ParentControl.Controls[i] as TEdit).Text, 0) - 1;
if n >= 0 then
begin
// Mit Array vergleichen
If ba[n] then
begin
WrongEdit := (ParentControl.Controls[i] as TEdit);
Result := True;
Exit;
end else
ba[n] := true;
end;
end;
end;
Es geht die Edits unter einem Control durch, zählt TEdit-Ableger, und prüft gegen ein dynamisches Bool-Array.
Trifft es auf ein Edit mit einer Zahl, die schon existiert, bricht es ab und notiert dieses Edit in WrongEdit. So kann man dieses selektieren, markieren, etc.
Aufgerufen wereden könnt es etwa so:
Delphi-Quellcode:
var
we: Tedit;
begin
if CheckDuplicates(Panel1, we) then
begin
// mach etwas mit we
end;
end;
Ein netter Nebeneffekt ist, dass es Zahlen, die grösser als die Anzahl der Edits sind ebenfalls als Doppelte angezeigt werden...
[edit] noch ein bissel Entbugged
[/edit]