Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zugriffsverletzung beim dynamischen Zugriff auf TCheckBox
bf109g.01 - Di 23.03.10 19:45
Titel: Zugriffsverletzung beim dynamischen Zugriff auf TCheckBox
Meine Idee: Ich habe 6 Checkboxen von denen jede für einen bestimmten Typ steht.
Wenn jetzt bei einer bereits abgehackten Checkbox der Haken manuell entfernt wird, soll der zugehörige Typ der jeweiligen Checkbox ermittelt werden, damit ich den weiterverarbeiten kann.
Allerdings gibt es schon bevor ich die Prozedur überhaupt aufrufe, Probleme und eine Fehlermeldung bei Zeile 9.
Zugegeben, die Konstruktion ist etwas abenteuerlich, aber ich sehe nicht, warum die nicht funktionieren sollte...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm6.cb1Click(Sender: TObject); var typ: string; I: Integer; begin if (Sender as TCheckBox).Checked = true then begin (Sender as TCheckBox).Checked:= false; for I := 1 to 6 do if (Sender as TCheckBox).Name = TCheckbox(Form6.FindComponent('CB'+inttostr(i))).name then case i of 0: typ:='..'; 4: typ:='...'; end; |
Dank euch.
Edit: Habs wieder schon selbst. Die for-Schleife geht bis 6, allerdings gibt es nur 5 Objekte, da kommt der Fehler her.
Was ich allerdings nciht verstehe ist, warum, sobald die Prozedur einfach nur da ist, ohne dass sie durch den benötigten Klick auf cb1 aufgerufen wird, der Haken der Checkbox cb1 einfach nicht mehr gesetzt / bzw sofort wieder entfernt wird.
Kann es sein, dass wenn eine andere Prozedur cb1.checked:=true; ausführt, dieser Befehl dann gleichzeitig "procedure cb1click" auslöst? Anders kann ich mir das jetzt nicht erklären...
Moderiert von
Narses: Titel geändert, war: "ZUgriffsverletzung, verstehe den Fehler nicht... :(".
Jakob_Ullmann - Di 23.03.10 19:48
Was sind denn diese "Probleme"?
bf109g.01 - Di 23.03.10 19:56
Jakob_Ullmann hat folgendes geschrieben : |
Was sind denn diese "Probleme"? |
"EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0048D175 in Modul Seafight.exe'." Wenn es dich glücklich macht. Wie ich das genauer ausdifferenziert hinschreiben soll, weiß ich nicht.
Hat sich aber schon erledigt (s.o.Edit).
Jakob_Ullmann - Di 23.03.10 20:04
zu deinem EDIT: Was hast du erwartet? Du prüfst, ob die checkbox gecheckt ist, und falls ja, wird sie "entcheckt". (abgesehen davon, dass man nie auf True vergleichen sollte! TCheckBox.Checked ist schon Boolean.)
ALF - Di 23.03.10 20:06
bf109g.01 hat folgendes geschrieben : |
Kann es sein, dass wenn eine andere Prozedur cb1.checked:=true; ausführt, dieser Befehl dann gleichzeitig "procedure cb1click" auslöst? Anders kann ich mir das jetzt nicht erklären... |
Nein,
es sei denn, das Du wo anders im Quelltext noch mal cb1.checked:=false drin hast!
aussversehen!?
Gruss Alf
Moderiert von
Narses: Zitat-Syntax korrigiert.
ALF - Di 23.03.10 21:23
:oops: hab ich das doch verwechselt mit meinem Menu.checked!
Sooorry :?
Gruss ALf
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!