Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
686 Beiträge
 
#15

AW: CheckListBox Ergebnisse auflisten

  Alt 28. Nov 2018, 16:21
.. kann es sein das nach der for Schleife der Counter i nicht mehr richtig ist.

Grüße
Klaus


Wo müsste ich den dann ändern?
Ich habe
i, n : Integer;

als Variablen eingegeben

Du schreibst:
Delphi-Quellcode:
procedure TEquipment.Button1_prüfenClick(Sender: TObject);

begin
  n := 0;
  for i := 0 to CheckListBox1.Items.Count - 1 do
  begin
    if CheckListBox1.Checked[i] then inc(n);
  end;
  Label2_Überprüfung.Caption := Label2_Überprüfung.Caption + sLineBreak + CheckListBox1.Items[i];

end;

end.
Du verwendest i in der Zuweisung der Caption außerhalb der Schleife.
Das ist Falsch. i wird am Ende jedes Schliefendurchlaufs um 1 erhöht. Auch beim letzten Durchlauf. Demnach sprichst du auch nach der Schleife ein Item der CheckListBox an, welches nicht existiert (Listenindex außerhalb des gültigen Bereichs).

Wenn du mal diesen Code ausprobierst (um dir das zu verdeutlichen):
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  i: Integer;
begin
  mmo1.Lines.Clear;
  for i:=0 to 5 do
  begin
    mmo1.Lines.Add('Innerhalb der Schleife: '+IntToStr(i));;
  end;
  mmo1.Lines.Add('Außerhalb der Schleife: '+IntToStr(i));;
end;
(Dieser Code setzt voraus, dass du einen Button mit dem Namen btn1 und ein Memo mit dem Namen mmo1 hast).

Da kommt folgendes Ergebins:
Zitat:
Innerhalb der Schleife: 0
Innerhalb der Schleife: 1
Innerhalb der Schleife: 2
Innerhalb der Schleife: 3
Innerhalb der Schleife: 4
Innerhalb der Schleife: 5
Außerhalb der Schleife: 6
Spricht für sich.


Richtig wäre also:
Delphi-Quellcode:
procedure TEquipment.Button1_prüfenClick(Sender: TObject);

begin
  n := 0;
  for i := 0 to CheckListBox1.Items.Count - 1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      Label2_Überprüfung.Caption := Label2_Überprüfung.Caption + sLineBreak + CheckListBox1.Items[i];
      inc(n);
    end;
  end;

end;

end.
wofür du n benötigst ist mir nicht klar.

Und: Schleifenvariablen sollte immer lokal deklariert sein. Also im var-Abschnitt der Procedure. Finde ich bei dir nicht.

Und: Warum nutzt du nicht die Delphi-Tags und schreibst deinen Code da hinein???? Ein Bild im Anhang macht es allen anderen schwer dir zu helfen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (29. Nov 2018 um 13:12 Uhr)
  Mit Zitat antworten Zitat