AGB  ·  Datenschutz  ·  Impressum  







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

Warum "System.ArgumentOutOfRangeExeption"

Ein Thema von gfjs · begonnen am 15. Sep 2006 · letzter Beitrag vom 17. Sep 2006
Antwort Antwort
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#1

Warum "System.ArgumentOutOfRangeExeption"

  Alt 15. Sep 2006, 03:45
Guten Morgen, Allerseits.

Auf einem Formular sollen sich mehrere Panels befinden, in denen jeweils mehrere Labels platziert werden. Um alle Labels in einer Schleife durchlaufen zu können, wollte ich die Parent-Eigenschaft der Labels ändern. Ich habe das mit einem Panel und 18 Labels so versucht:
Delphi-Quellcode:
  for I := 0 to Panel3.Controls.Count - 1 do
  begin
    Panel3.Controls[i].Parent := Self.Panel1
  end; // for I := 0 to Panel3.Controls.Count - 1 do
Nach dem 8. Durchlauf brach das Programm mit der im Titel erwähnten Fehlermeldung ab. Ich habe dann die Anzahl der Labels im Panel auf sieben reduziert; darauf brach das Programm nach dem dritten Schleifendurchlauf ab. Mit nur einem Label klappt es, mit zwei Labels nicht mehr. Warum???

Gruß Jürgen

<Edit>
Dem Fehler bin ich jetzt auf die Spur gekommen: Durch die Änderung der Parent-Eigenschaft verringert sich die Zahl der Labels auf dem Panel, so dass nach der Hälfte der ursprünglich vorhandenen Labels die Exception ausgelöst wird. Das lässt sich dadurch lösen, dass man die Schleife rückwärts durchläuft. Der gewünschte Erfolg ist aber trotzdem ausgeblieben: Jetzt sind die Labels nicht mehr sichtbar (trotz BringToFront). Außerdem hat Self.Controls.Count nach dem durchlaufen der Schleife noch immer den Wert 1, Panel3.Controls.Count hat jetzt den Wert 0 - was bedeuten würde, dass die Labels aus dem Panel verschwunden sind, ohne sich jetzt im Formular zu befinden. Wo sind sie???
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Warum "System.ArgumentOutOfRangeExeption"

  Alt 16. Sep 2006, 04:18
Guten Morgen.

Ich bin noch immer auf der Suche nach meinen Labels, bei denen ich die Parent-Eigenschaft geändert habe!
Delphi-Quellcode:
for I := 0 to Panel3.Controls.Count - 1 do
  begin
    Panel3.Controls[i].Parent := Self.Panel1
  end; // for I := 0 to Panel3.Controls.Count - 1 do
Vielleicht findet sich ja noch jemand, der mir bei der Suche hilft?!

Vielen Dank im Voraus.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

Re: Warum "System.ArgumentOutOfRangeExeption"

  Alt 16. Sep 2006, 12:03
Du entfernst ja die Controls aus Panel3, damit werden es weniger und nach etwa der Häfte bist du mit dem Index hinter dem Letzten.

Code:
for I := [b][color=#ff0000]Panel3.Controls.Count - 1 downto 0[/color][/b] do
  Panel3.Controls[I].Parent := Self.Panel1;

// oder

for I := 0 to Panel3.Controls.Count - 1 do
  Panel3.Controls[[b][color=#ff0000]0[/color][/b]].Parent := Self.Panel1;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Warum "System.ArgumentOutOfRangeExeption"

  Alt 16. Sep 2006, 13:57
Da du .Net 1.1 benutzt hier mal ein Bleistift mit der ArrayList:

Delphi-Quellcode:
var
  panelControls : ArrayList;
  childControl : Control;
begin
  panelControls := ArrayList.Create(deinPanel.Controls); //kopie der collection

  for childControl in panelControls do
    childControl.Parent := andererParent;
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Warum "System.ArgumentOutOfRangeExeption"

  Alt 17. Sep 2006, 04:46
@ himitsu

Diesen Fehler hatte ich bereits entdeckt - siehe <Edit> im ersten Beitrag. Trotzdem vielen Dank für Deine Mühe. Hat mir aber trotzdem noch was gebracht, weil ich die zweite Variante noch nicht kannte.

@ Elvis

Super! Das war genau das, was ich gebraucht habe. Es wäre schön, wenn Du mir noch erklären könntest, warum meine Version nicht geklappt hat.

Vielen Dank und noch einen schönen Tag.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Warum "System.ArgumentOutOfRangeExeption"

  Alt 17. Sep 2006, 08:42
Zitat von gfjs:
@ Elvis
Super! Das war genau das, was ich gebraucht habe. Es wäre schön, wenn Du mir noch erklären könntest, warum meine Version nicht geklappt hat.
Hatten meine Vorredner doch schon erklärt.
Du hast die Collection verändert während du durch sie durchliefst. In meinem Schnipsel bekommst du eine Kopie dieser Collection, Himitsus Code ging immer auf das erste Element.
Beides sollte funktionieren und welche Variante man nimmt sollte man einfach nach ästhetischen Punkten auswählen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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:13 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