Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi CheckListBox Ergebnisse auflisten (https://www.delphipraxis.net/198767-checklistbox-ergebnisse-auflisten.html)

Das Orakel von 28. Nov 2018 14:01

CheckListBox Ergebnisse auflisten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin ein totaler Programmier-Neuling, für euch ist die Frage vielleicht banal... naja...

Mein Problem:
Ich möchte eine Checkliste haben, bei der man Sachen auswählen kann, dann auf einen Button klickt und diese ausgewählten Einträge dann in einem Label aufgelistet werden.
Was ich habe ist, dass ich die Einträge auswähle, auf den Button klicke und mir dann in einem Label angezeigt wird, wie viele Einträge ich ausgewählt habe.
Was ich jedoch haben möchte ist, dass dann im Label angezeigt wird:

Eintrag A
Eintrag B
Eintrag M
Eintrag Q

Ich hoffe es ist klar wie ich meine...
Es gab vor einiger Zeit mal jemanden mit einem ähnlichen Problem hier im Forum, nur habe ich nicht nachvollziehen können wie er das Problem noch gelöst hat (https://www.delphipraxis.net/142664-checklistbox.html)

Ich pack mal den Screenshot von der entsprechenden Stelle im Unit dazu, vielleicht könnt ihr mir sagen wo genau ich den Eintrag ändern muss...

Viele Grüße :)

DieDolly 28. Nov 2018 14:06

AW: CheckListBox Ergebnisse auflisten
 
Da du noch grün und biegsam bist, hier eine Empfehlung von haentschman
Zitat:

Zitat von haentschman (Beitrag 1419553)
Tipps an dich:
Wenn du vorhast in der Softwareentwicklung zu bleiben, dann beherzige vieleicht diese Tipps: :zwinker:
1. zwingend Styleguide! https://www.delphi-treff.de/object-pascal/styleguide/ Der Code in deinem Beispiel ist schrecklich formatiert. Die IDE hat einen Codeformatter!
2. CamelCase für Bezeichner, Variablen etc. https://de.wikipedia.org/wiki/Camelcase siehe Programmierung
3. auf Unterstrich verzichten!
4. --- (unwichtig)
5. F - Präfix für private Variablen - siehe Styleguide

Die Tipps waren für jemand anders, aber die kann man so eigentlich an jeden schicken

Das Orakel von 28. Nov 2018 14:10

AW: CheckListBox Ergebnisse auflisten
 
@DieDolly

nehme ich mir gerne zu Herzen :D


Eine Idee für mein Problem hast du keine? :(

DieDolly 28. Nov 2018 14:10

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Was ich jedoch haben möchte ist, dass dann im Label angezeigt wird:

Eintrag A
Eintrag B
Eintrag M
Eintrag Q
Ein Label ist eigentlich dafür da etwas in einer Zeile anzuzeigen.

Wenn du das wirklich so umsetzen willst, dann musst du AutoSize deines Labels auf False stellen, das Label groß genug ziehen (breite und Höhe) und dann in etwa
Delphi-Quellcode:
LabelSoUndSo.Caption := LabelSoUndSo.Caption + sLineBreak + ChecklistBox1.Items[i]; // das da IN die Schleife

Das Orakel von 28. Nov 2018 14:49

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von DieDolly (Beitrag 1419567)
Zitat:

Was ich jedoch haben möchte ist, dass dann im Label angezeigt wird:

Eintrag A
Eintrag B
Eintrag M
Eintrag Q
Ein Label ist eigentlich dafür da etwas in einer Zeile anzuzeigen.

Wenn du das wirklich so umsetzen willst, dann musst du AutoSize deines Labels auf False stellen, das Label groß genug ziehen (breite und Höhe) und dann in etwa
Delphi-Quellcode:
LabelSoUndSo.Caption := LabelSoUndSo.Caption + sLineBreak + ChecklistBox1.Items[i]; // das da IN die Schleife


Danke, schonmal
Das Erstellen ist kein Problem.
Wenn ich jetzt aber den Button klicke kommt die Fehlermeldung: "Listenindex außerhalb des gültigen Bereichs (9)"

joachimd 28. Nov 2018 15:15

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von Das Orakel
Wenn ich jetzt aber den Button klicke kommt die Fehlermeldung: "Listenindex außerhalb des gültigen Bereichs (9)"


Listen zählen von 0 bis (Anzahl-1) bzw von Low(...) bis High(...)

haentschman 28. Nov 2018 15:20

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Listenindex außerhalb des gültigen Bereichs (9)
An welcher Quellcode Stelle?

Das Orakel von 28. Nov 2018 15:24

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von joachimd (Beitrag 1419572)
Listen zählen von 0 bis (Anzahl-1) bzw von Low(...) bis High(...)


Okay, wie muss ich denn da konkret die Unit ändern?

Das Orakel von 28. Nov 2018 15:26

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von haentschman (Beitrag 1419573)
Zitat:

Listenindex außerhalb des gültigen Bereichs (9)
An welcher Quellcode Stelle?


An gar keiner, das Debugging meldet nichts, das Programm startet.
Wenn ich dann den Butten (oben beschrieben) drücke, erscheint die Meldung

haentschman 28. Nov 2018 15:27

AW: CheckListBox Ergebnisse auflisten
 
Vorhin hast du es doch auch richtig gemacht... (erster Post Bild) :wink:
Die Stelle (Breakpoint) wo der Fehler auftritt. Da kann man auch sehen welche Werte die Variablen haben. (vorher)
http://docwiki.embarcadero.com/RADSt...(IDE-Tutorial)

PS: Stelle mal in deinem Profil deine Delphi Version ein. Da können wir besser helfen.

Das Orakel von 28. Nov 2018 15:53

AW: CheckListBox Ergebnisse auflisten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von haentschman (Beitrag 1419577)
Vorhin hast du es doch auch richtig gemacht... (erster Post Bild) :wink:
Die Stelle (Breakpoint) wo der Fehler auftritt. Da kann man auch sehen welche Werte die Variablen haben. (vorher)
http://docwiki.embarcadero.com/RADSt...(IDE-Tutorial)

PS: Stelle mal in deinem Profil deine Delphi Version ein. Da können wir besser helfen.



Ehm... ich weiß jetzt nicht genau worauf du hinaus willst
Einen Screenshot hab ich mal nochmal gemacht
Soll ich die Schritte machen auf der Seite "Debuggen der Anwendung"?

Klaus01 28. Nov 2018 15:58

AW: CheckListBox Ergebnisse auflisten
 
.. kann es sein das nach der for Schleife der Counter i nicht mehr richtig ist.

Grüße
Klaus

Das Orakel von 28. Nov 2018 16:03

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von Klaus01 (Beitrag 1419581)
.. 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

Klaus01 28. Nov 2018 16:07

AW: CheckListBox Ergebnisse auflisten
 
..Du könntest die Caption des Labels innerhalb der Schleife setzen

Grüße
Klaus

Hobbycoder 28. Nov 2018 16:21

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von Das Orakel von (Beitrag 1419582)
Zitat:

Zitat von Klaus01 (Beitrag 1419581)
.. 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.

DP-Maintenance 28. Nov 2018 18:06

Dieses Thema wurde am "28. Nov 2018, 19:06 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.

DieDolly 28. Nov 2018 19:14

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von Klaus01 (Beitrag 1419584)
..Du könntest die Caption des Labels innerhalb der Schleife setzen

Grüße
Klaus

Habe ich schon in #4 vorgeschlagen. Wurde wohl ignoriert oder nicht gesehen.

haentschman 29. Nov 2018 05:58

AW: CheckListBox Ergebnisse auflisten
 
Moin...:P
Was wällt dir an den 2 Screenshots auf?
https://www.delphipraxis.net/attachm...n-probem-1.jpg
https://www.delphipraxis.net/attachm...-problem-2.jpg
Du verwendest, neuerdings, I bei Label_Überprüfung. I ist außerhalb der Schleife nicht mehr gültig! (wurde schon gesagt) :wink:

Hobbycoder 29. Nov 2018 09:39

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von haentschman (Beitrag 1419620)
Du verwendest, neuerdings, I bei Label_Überprüfung. I ist außerhalb der Schleife nicht mehr gültig! (wurde schon gesagt) :wink:

Gültig schon. Hat auch eine vorhersehbaren Wert. Nur eben entspricht dieser Max-Scheifendurchläufe+1 und passt somit auch nicht mehr zu den Items.

Hier mangelt es an den Grundlagen. Tutorials, die es im Netz zu Hauf gibt, sollten helfen. Bevor die Grundlagen nicht vorhanden sind, bringt das alles nichts. Sorry.

DieDolly 29. Nov 2018 12:06

AW: CheckListBox Ergebnisse auflisten
 
Zitat:

Zitat von Hobbycoder (Beitrag 1419645)
Hier mangelt es an den Grundlagen. Tutorials, die es im Netz zu Hauf gibt, sollten helfen. Bevor die Grundlagen nicht vorhanden sind, bringt das alles nichts. Sorry.

Oft lernt man auch einfach durch Herumprobieren statt über aktives Lernen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz