Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 23.03.10 19:45 
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...
ausblenden 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 user profile iconNarses: Titel geändert, war: "ZUgriffsverletzung, verstehe den Fehler nicht... :(".


Zuletzt bearbeitet von bf109g.01 am Di 23.03.10 19:53, insgesamt 1-mal bearbeitet
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 23.03.10 19:48 
Was sind denn diese "Probleme"?
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 23.03.10 19:56 
user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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.)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 23.03.10 20:04 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
  if (Sender as TCheckBox).Checked = true then					

Der Vergleich mit Booleanwerten sollte dringenst vermieden werden.
Warum das so ist, siehe www.delphi-forum.de/....php?p=548760#548760 und www.delphi-treff.de/...olean-werten/page/4/ ;)

Darüber hinaus bietet es sich an, die Funktionen Low() und High() zur dynamischen Bestimmung der Array-Länge zu verwenden. :zustimm:


Zuletzt bearbeitet von Marc. am Di 23.03.10 20:06, insgesamt 3-mal bearbeitet
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 23.03.10 20:06 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Zitat-Syntax korrigiert.

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 23.03.10 21:11 
Moin!

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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,
Doch doch, genau so ist es, Zuweisung auf .Checked einer TCheckBox löst auch das OnClick-Ereignis aus. ;)

Hier gibt´s nochmal Details. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 23.03.10 21:23 
:oops: hab ich das doch verwechselt mit meinem Menu.checked!
Sooorry :?
Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!