Hallo Jürgen,
ich bin mir nicht sicher, ob ich Dein Problem richtig verstanden habe; aber auf jeden Fall hast Du folgende Probleme an den folgenden Stellen:
Delphi-Quellcode:
for i := 0 to 11 - 1 do
begin
Labels[i] := NewLabel.Create;
with Labels[i] do
begin
Text := 'Label ' + i.ToString;
Left := 20;
Top := 20 + i*40;
BackColor := System.Drawing.Color.White;
BorderStyle := System.Windows.Forms.BorderStyle.Fixed3D;
Self.Controls.Add(Labels[i]);
Include(Labels[i].Click, Self.Dummy_Click);
end;
end; // for i := 0 to 11 - 1 do
StartLabels := Labels;
StartKonfig := Labels;
- Mit NewLabel.Create erzeugst Du ein Label, dessen Adresse (!) in Labels[i] gespeichert wird. (Der Compiler registriert wegen der Deklaration zusätzlich, dass diese Adresse auf ein Label verweist.)
- Für das Array Labels wird automatisch der Platz für n Adressen reserviert; dieser Platz erhält selbst eine eigene Adresse.
- Mit StartLabels := Labels; teilst Du dem Programm nur mit, dass unter der Adresse der Variablen StartLabels die Inhalte der Variablen Labels zu finden sind.
- Mit StartKonfig := Labels; teilst Du dem Programm nur mit, dass unter der Adresse der Variablen StartKonfig die Inhalte der Variablen Labels zu finden sind.
Unter allen drei Array-Variablen finden sich also die gleichen 11 Labels. Wenn Du eines dieser Labels änderst, findest Du die Änderungen bei allen drei Array-Variablen wieder.
Für weitere Erläuterungen verweise ich Dich auf die [
oh]NET-Doku:[/
oh]
- Array.Clone gibt Dir nähere Informationen zu Deinem Verfahren.
- Array.Copy liefert (ohne dass ich es genauer durchdacht habe) wahrscheinlich wirklich die von Dir gewünschte Kopie.
Generell sind auch für Dein Verfahren die Klassen
Array und ArrayList besser geeignet. Leider sind sie unter NET 1.1 von allgemeiner Struktur, und Du musst immer ein cast() anwenden. (Die generischen Klassen von NET 2.0 bieten mehr Möglichkeiten.)
Viel Erfolg! Jürgen