AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung

Ein Thema von MiChiJong · begonnen am 13. Nov 2006 · letzter Beitrag vom 13. Nov 2006
Antwort Antwort
MiChiJong

Registriert seit: 27. Okt 2006
20 Beiträge
 
#1

Zugriffsverletzung

  Alt 13. Nov 2006, 00:25
Hallo miteinander,

Habe folgende Prozedur programmiert:
Delphi-Quellcode:
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;
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.

Woran kann dies liegen. Wäre euch echt sehr dankbar, wenn ihr mir dambei weiterhelfen könnte.

Gruß Michael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 07:36
Ich würde die Komponent-Referenzen in einem Array verwalten und statt harten Casts wiche verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 14:17
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.
  Mit Zitat antworten Zitat
MiChiJong

Registriert seit: 27. Okt 2006
20 Beiträge
 
#4

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 14:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 14:39
Naja, ein Softcast schreit auf jeden fall sobald du einen zugriffsfehler machst.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 14:47
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:
var
  lEdit: TEdit;
[...]
lEdit := TEdit(FindComponent(name[x] + tempzahl));
lEdit.Top := lEdit.Top - 20;
lEdit.Name := name[x] + temp;
Für die AV hab ich folgende Vermutung.
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 15:09
Zitat von DGL-luke:
Naja, ein Softcast schreit auf jeden fall sobald du einen zugriffsfehler machst.
Aber dann würde der Fehler doch nicht verschwinden, wenn man den Hardcast durch Softcast ersetzt (wie mkinzler gesagt hat), sondern erst Recht auftreten.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zugriffsverletzung

  Alt 13. Nov 2006, 15:18
Zitat:
Aber dann würde der Fehler doch nicht verschwinden, wenn man den Hardcast durch Softcast ersetzt (wie mkinzler gesagt hat), sondern erst Recht auftreten.
Aber an der richtigen Stelle. (Hier wohl egal). Meine Hauptanwort war aber das mit dem Array.
Markus Kinzler
  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 02:17 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