![]() |
Zugriffsverletzung
Hallo miteinander,
Habe folgende Prozedur programmiert:
Delphi-Quellcode:
Diese Funktion soll nichts anderes machen, als eine Reihe bei einer Reihe von zuvor definierter Elemente die Position und den Namen zu ändern, jedoch tritt immer mal wieder, (Mir kommt es zufällig vor) eine Warnung mit einem Zugriffsfehler auf.
procedure TForm1.verschiebeTeilnehmer(tempzahl:String);
var name: TNamenArray; x: Integer; temp: String; begin ShowMessage('Verschiebe T.'); //erniedrige Tempzahl um 1 (neuer Wert) temp:=InttoStr(Strtoint(tempzahl)-1); //Einlesen des Arrays mit den Editfeldnamen name:=setArrays(); for x := 0 to 12 do begin TEdit(FindComponent(name[x] + tempzahl)).Top:=TEdit(FindComponent(name[x] + tempzahl)).Top-20; TEdit(FindComponent(name[x] + tempzahl)).Name:=name[x] + temp; end; //Positionsänderung der Checkboxen, Comboboxen und des Löschbuttons TCheckBox(FindComponent('mitglied' + tempzahl)).Top:=TCheckBox(FindComponent('mitglied' + tempzahl)).Top-20; TComboBox(FindComponent('kurs' + tempzahl)).Top:=TComboBox(FindComponent('kurs' + tempzahl)).Top-20; TComboBox(FindComponent('sportart' + tempzahl)).Top:=TComboBox(FindComponent('sportart' + tempzahl)).Top-20; TButton(FindComponent('loeschen' + tempzahl)).Top:=TButton(FindComponent('loeschen' + tempzahl)).Top-20; //Umbennen der Checkboxen, Comboboxen und des Löschbuttons TCheckBox(FindComponent('mitglied' + tempzahl)).Name:='mitglied' + temp; TComboBox(FindComponent('kurs' + tempzahl)).Name:='kurs' + temp; TComboBox(FindComponent('sportart' + tempzahl)).Name:='sportart' + temp; TButton(FindComponent('loeschen' + tempzahl)).Name:='loeschen' + temp; Woran kann dies liegen. Wäre euch echt sehr dankbar, wenn ihr mir dambei weiterhelfen könnte. Gruß Michael |
Re: Zugriffsverletzung
Ich würde die Komponent-Referenzen in einem Array verwalten und statt harten Casts wiche verwenden.
|
Re: Zugriffsverletzung
Was hat eine Zugriffsverletzung eigentlich mit der Art des Castings zu tun? Ich hatte so ein Problem nämlich auch mal, allerdings wurde es da behoben, als ich Soft Cast durch Hard Cast ersetzt hatte.
|
Re: Zugriffsverletzung
Die Frage stelle ich mir auch. Normalerweise sollte es sowohl mit hard- als auch softcast funktionieren. Bzw. macht dies erstmal keinen Unterschied und ist daher Geschmackssache.
|
Re: Zugriffsverletzung
Naja, ein Softcast schreit auf jeden fall sobald du einen zugriffsfehler machst.
|
Re: Zugriffsverletzung
Es hat nichts mit der Frage zu tun aber folgendes würde ändern da sonst 3 mal nach der Komponente gesucht wird (3 Schleifendurchläufe wo jedes mal die "Name"-Strings verglichen werden)
Delphi-Quellcode:
TEdit(FindComponent(name[x] + tempzahl)).Top:=TEdit(FindComponent(name[x] + tempzahl)).Top-20;
TEdit(FindComponent(name[x] + tempzahl)).Name:=name[x] + temp;
Delphi-Quellcode:
Für die AV hab ich folgende Vermutung.
var
lEdit: TEdit; [...] lEdit := TEdit(FindComponent(name[x] + tempzahl)); lEdit.Top := lEdit.Top - 20; lEdit.Name := name[x] + temp; Ich gehe davon aus das du zur Designzeit die Komponenten erzeugst. Wenn du dann einen Button namens "Button2" hast kannst du im Quelltext per "Button2." auf die Eigenschaften und methoden zugreifen. Wenn du jedoch den Namen von "Button2" änderst kannst du nicht mehr über "Button2." auf die Eigenschaften und Methoden zugreifen weil "Button2" dann "nil" ist. Button2 ist also keine Referenz auf die Instanz sondern etwas besonderes. Ich vermute also das du dann noch irgendwo auf "Button2" zugreifst nach dem du den Namen geändert hast. |
Re: Zugriffsverletzung
Zitat:
|
Re: Zugriffsverletzung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz