![]() |
Checkboxen mit gleichem Boolean-Wert zählen
Hi
Ich habe ein Programm geschrieben, in dem 29 Checkboxen sind. Wie kann ich (anhand eines Integers) alle CheckBoxen mit dem gleichen Boolean-Wert zählen? :?: Beispiel: Alle Checkboxen zählen, die auf 'False' gesetzt sind. Tumm |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Mit
![]() |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Das hab' ich schon probiert. Aber Delphi meint, dass die Eigenschaft 'Checked' undefiniert sei.
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Zeig doch mal her was du versucht hast, meine Glaskugeln ist im Urlaub. :zwinker: ;)
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Delphi-Quellcode:
if FindComponent('CheckBox' + IntToStr(c1)).Checked = true then
... |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Delphi-Quellcode:
;)
if TCheckbox(FindComponent('CheckBox' + IntToStr(c1))).Checked = true then
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Danke, es funzt!
|
In einer Schleife - Checkboxen auslesen
Hi
Ich hab das so angewendet:
Delphi-Quellcode:
c3 = Integer, a = Tstrings, na = Tstrings, Memo1 = Memo
while c3 < 29 do begin
Inc(c3); if TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Checked = true then begin if durckm.ItemIndex = 1 then a.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgeben!') else Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!'); end else begin if durckm.ItemIndex = 1 then na.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat nicht abgegeben!'); Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!'); end; end; Aber es geht nich! (Zugriffsverletzung) :( |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Schon mal was von Debuggen gehört?
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Wo hast du C3 definiert? Lokal oder? Hast du C3 auch vorher auf 0 gesetzt weil sonst ist C3 nicht initialisiert und da kommt nicht viel gutes bei raus ;)
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
nich richtig
ich hab c3 nicht in der Prozedur deklariert. Auf 0 gesetzt hab ichs aber. |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Was ist nicht richtig?
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Noch nicht richtig was von debuggen gehört.
Is irgendwie noobig, kann ich mir gut vorstellen. |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Hast Du denn wirklich alle Checkboxen richtig benannt?
Du kannst Deinen Code vielleicht auch so ändern, dass Du zunächst mal prüfst, ob die Checkbox des gesuchten Namens überhaupt vorhanden ist:
Delphi-Quellcode:
while c3 < 29 do begin
Inc(c3); if FindComponent('CheckBox' + IntToStr(c3))<>nil then begin if TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Checked = true then begin if durckm.ItemIndex = 1 then a.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgeben!') else Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!'); end else begin if durckm.ItemIndex = 1 then na.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat nicht abgegeben!'); Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!'); end; end else ShowMessage('CheckBox' + IntToStr(c3)+' existiert nicht!'); end; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Hallo, das ist ja grausamer Code hier.
Es muss doch auffallen wenn man 6 Mal das Gleiche hinschreibt. Lokale Variablen sind die Lösung.
Delphi-Quellcode:
var
comp : TComponent; cb : TCheckbox; .... comp := FindComponent('CheckBox' + IntToStr(c3)); if Assigned(comp) then begin cb := comp as TCheckbox; // und jetzt wird nur noch mit cb gearbeitet!! |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Der Quellcode da liefert aber auch nicht das wahre: Delphi meint, dass
Delphi-Quellcode:
gefälligst mit einer Klammer statt ':=' (Zuweisungsoperator) geschrieben werden soll.
comp := FindComponent('CheckBox' + IntToStr(c3));
Delphi-Quellcode:
liefert auch einen Fehler (nein, nein, es liegt nicht am fehlenden Semikolon).
Assigned(comp)
Bei 'as' gibts auch ein Fehler. Also ich habs insgesamt so angewendet (Vorher natürlich auch lokal die Variablen deklariert):
Delphi-Quellcode:
while c3 < 29 do begin
comp := FindComponent('CheckBox' + IntToStr(c3)); if Assigned(comp) then begin cb := comp as TCheckbox; if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else na.Add(cb.Caption + ' hat nicht abgegeben!'); end; end; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Zitat:
Dass zwischen Variablendeklaration und den Anweisungen nur 4 Punkte stehen, sollte eigentlich zum Mitdenken anregen... |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Ich meine nicht, dass er nicht das gewünschte Ergebnis liefert sondern das diese Fehler auftreten
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Wow, schwere Geburt. :roll:
Was shmia meint, sieht im Endeffekt dann so aus:
Delphi-Quellcode:
Und wenn Du das so machst, bekommst Du immer noch eine Zugriffsverletzung?
procedure TForm1.wasweissich;
var comp : TComponent; cb : TCheckbox; c3 : integer; begin c3:=0; while c3 < 29 do begin comp := FindComponent('CheckBox' + IntToStr(c3)); if Assigned(comp) then begin if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else na.Add(cb.Caption + ' hat nicht abgegeben!'); end; end; end; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
So dumm bin ich dann doch wieder nicht.
Ja, es gibt immer noch Fehler. |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Schnell getippt, versuch mal in der Art:
Delphi-Quellcode:
while c3 < 29 do begin
comp := (FindComponent('Checkbox' + IntToStr(c3)) as TCheckbox); if Assigned(comp) then begin if comp.Checked = true then a.Add(comp.Caption + ' hat abgegeben!') else na.Add(comp.Caption + ' hat nicht abgegeben!'); end; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Ich würde mich als Delphi auch beschweren, da cb= NULL ist.
du musst comp auf cb als TCheckbox casten.
Delphi-Quellcode:
procedure TForm1.wasweissich;
var comp : TComponent; cb : TCheckbox; c3 : integer; begin c3:=0; while c3 < 29 do begin comp := FindComponent('CheckBox' + IntToStr(c3)); if Assigned(comp) then begin cb := comp as TCheckbox; // <-- if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else na.Add(cb.Caption + ' hat nicht abgegeben!'); end; end; inc (c3); // <-- nicht vergessen end; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Liste der Anhänge anzeigen (Anzahl: 1)
Manno, funzt immer noch nicht! :(
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Hallo? Liest du auch was ich schreibe?? :roll:
comp := (FindComponent('Checkbox' + IntToStr(c3)) as TCheckbox); |
Re: Checkboxen mit gleichem Boolean-Wert zählen
laut deinem Screeshot hast in TForm24.Button13Click einen Fehler.
Du hast
Delphi-Quellcode:
deklariert. Es müßte aber
comb : TComponent;
Delphi-Quellcode:
heißen.
comp : TComponent;
comb <> comp! Wieso sich der Compiler nicht beschwert ... :gruebel: |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Boa, ich nehm zurück dass ich nicht blöd bin...
Ist wahrscheinlich irgendwie ne' Systemvariable oder sowas... Jetzt geht'ts. Aber ne' Zugriffsverletzung kommt trotzdem noch... @Balu der Bär Ich lese deins natürlich auch. Aber es hat halt nicht funktioniert, wegen diesem Abschreibfehler... Danke! :-D |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Zitat:
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Bei welchem Code kommt die Exception?
Mal blind getippt: Bist du sicher das die jeweiligen Checkboxen mit den entsprechenden Nummern auch existieren? |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Also ich bin mir schon mal sicher dass sie existieren. Ich hab sie alle
CheckBox(+X) genannt. |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Delphi-Quellcode:
f2: Boolean
c3 := 0;
c3 := 1; while c3 < 29 do begin comp := (FindComponent('CheckBox' + IntToStr(c3)) as TCheckbox); if Assigned(comp) then begin cb := comp as TCheckbox; // <-- if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else na.Add(cb.Caption + ' hat nicht abgegeben!'); end; inc (c3); // <-- nicht vergessen end; Memo1.Lines.AddStrings(a); Memo1.Lines.Add(''); Memo1.Lines.AddStrings(na); Memo1.Lines.Add(''); Memo1.Lines.Add(Label6.Caption); Memo1.Lines.Add(Label7.Caption); Memo1.Lines.Add(''); Memo1.Lines.Add('Gesamt: ' + IntToStr(ja + nein)); printer.Canvas.Font.Size := 12; if f2 = false then begin for c2 := 0 to memo1.lines.count -1 do Begin printer.canvas.textout( 0, c2 * printer.Canvas.TextHeight( Memo1.Lines[c2] ) , Memo1.Lines[c2]); End; printer.EndDoc; |
Re: Checkboxen mit gleichem Boolean-Wert zählen
CheckBox0 existiert?
PS: geht doch einfach mal Schrittweise [F7] durch und schau wo und vorallem mit welchen Werten der Fehler auftritt. |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Achso: Delphi sagt außerdem noch, dass
Zitat:
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Ich hab' mal schrittweise gemacht. Aber inerhalb der Fehöer-Prozedur macht er plötzlich einen Sprung im Source als hätte ich einen Goto-Befehl eingesetzt.
Den ersten Teil der Schleife durchläuft er, den zweiten überspringt er irgendwie (Nur das Inc(c3)) |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Zitat:
Delphi-Quellcode:
Änder mal den Namen der Variablen "comp" in "compo", vielleicht kollidiert das "comp" mit der Typenbezeichnung.
c3:=0;
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Vermutlich wird am besten für uns alle sein wenn du dein Projekt mal hier anhängst.
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Zitat:
|
Re: Checkboxen mit gleichem Boolean-Wert zählen
Liste der Anhänge anzeigen (Anzahl: 1)
OK
(Ohne .dfm und .dcu) |
Re: Checkboxen mit gleichem Boolean-Wert zählen
P.S: Es sind einige unendliche lange Absätze drin, da ich schon oft das Problem mit den Checkboxen hatte und deswegen sie nicht in eine Schleife gemacht hab.
Macht aber auf Dauer bischen zu viel Arbeit |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Tut mir Leid aber ich kann mit dem Projekt nichts anfangen, da durch deine Umbenennaktion das Projekt nicht mehr kompiliert werden kann. Da du hier Hilfe von uns erwartest, sollte du vielleicht mal drüber nachdenken den Datenschutz (!) etwas zu reduzieren und uns stattdessen etwas Brauchbares anzubieten. :roll:
P.S.: Du kannst Beiträge auch editieren um Doppelposts zu vermeiden P.P.S: Schonmal etwas von Codeeinrückung gehört? |
Re: Checkboxen mit gleichem Boolean-Wert zählen
Eine Sache fällt mir auf.
Du müsstest die Zeile
Delphi-Quellcode:
in
while c3 < 29 do begin
Delphi-Quellcode:
ändern, da die Schleife sonst die CheckBox29 nicht erreichen würde.
while c3 <= 29 do begin
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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