Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Eine Komponente über eine Variable ansprechen


juergen - Mi 22.01.03 19:02
Titel: Eine Komponente über eine Variable ansprechen
Hallo,

ich möchte einige Checkboxen (30) auf ihre Eigenschaft CHECKED in einer FOR Schleife abfragen.

Hab folgendes probiert:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
check_name : TCheckBox;
.
.
.

for i:=1 to 30 do
        begin
        check_name.Name:='checkbox'+inttostr(i);
        if check_name.Checked = true then
        s:='JA'
        else
        s:='NEIN';
        end;


Beim Compilieren geht alles gut.

Zur Laufzeit kommt dann an der Stelle wo ich den Namen zuweise die Fehlermeldung:

Zugriffsverletzung bei Adresse ...

WARUM ?

DANKE

juergen


smiegel - Mi 22.01.03 19:09

Hallo,

Du musst das folgendermassen machen:


Quelltext
1:
2:
3:
4:
5:
for i:=1 to 30 do
begin
  if TCheckBox(FindComponent('checkbox'+IntToStr(i))).Checked then
    s:='JA' else s:='NEIN';
end; // for i


juergen - Do 23.01.03 09:16

Vielen Dank smiegel !

juergen


Brueggendiek - Do 23.01.03 10:29

Hallo Freunde!

Da ist aber bei Smiegels Programm ein kleiner Fehler drin - die Routine liefert den Wert der letzten Checkbox!

Richtig ist:

Quelltext
1:
2:
3:
4:
5:
6:
s:='NEIN';   // vorbelegen, falls keiner angekreuzt ist
for i:=1 to 30 do
begin
  if TCheckBox(FindComponent('checkbox'+IntToStr(i))).Checked then
    s:='JA';
end; // for i


Gruß

Dietmar Brüggendiek


smiegel - Do 23.01.03 10:34

Hallo,

Zitat:
Brueggendiek schrieb:
bei Smiegels Programm ein kleiner Fehler drin


Ich habe nur den Code von juergen so überabeitet, dass er das tut was er soll. Also ist dies nicht mein Fehler, sondern juergens.


Brueggendiek - Do 23.01.03 10:52

Hallo Smigel!

smiegel hat folgendes geschrieben:
Ich habe nur den Code von juergen so überabeitet, dass er das tut was er soll. Also ist dies nicht mein Fehler, sondern juergens.


Sorry, ich hatte die Frage von Juergen nicht mehr gelesen und nur den (leider beliebten) Fehler in Deiner Antwort bemerkt.

Unabhängig davon, wer es nun war: Es folgt doch gleich die Frage "liefert falsche Werte, was ist los", wenn ein Leser das kopiert und nicht versteht!

Im Übrigen ergibt die ganze Schleife so ja keinen Sinn und steht auch im Widerspruch zum Anfang der Fragestellung:
juergen hat folgendes geschrieben:
ich möchte einige Checkboxen (30) auf ihre Eigenschaft CHECKED in einer FOR Schleife abfragen.

Die fehlerhafte Behandlung der Komponentennamen führte dann zu einem offensichtlichen Problem und dem Posting.

Gruß

Dietmar Brüggendiek