![]() |
alle ListBox-Einträge erscheinen doppelt!
Hallo zusammen.
Ich möchte für eine Listbox Einträge aus einer anderen Datei einlesen und diese einfügen, wenn sie eine gewisse Bedingung erfüllen. Dies klappt auch bestens, aber alle Einträge werden doppelt aufgelistet (also etwa so: a b c a b c). Kann mir jemand sagen was ich tun muss, resp. was ich falsch mache? Ich füge sie über ListBox1.Items.Add(programm[i].name); ein. Habe es auch schon mit einer RadioGroup versucht, aber da tauchte das gleiche Problem auf. Wäre froh wenn mir jemand helfen könnte!!! Gruss Johanna |
Re: alle ListBox-Einträge erscheinen doppelt!
Hallo Johanna,
zeig doch mal bitte deinen Code um festzustellen,wo der fehler ist. |
Re: alle ListBox-Einträge erscheinen doppelt!
Hm... Okay, wird ein bisschen schwierig zum erklären, aber ich versuch es mal...
Delphi-Quellcode:
In einer anderen Datei, die vorher eingefügt wurde, habe ich ein Array von einem Record. Wenn die Eigenschaft "rechenart" mit einer vorher eingegebenen rechenart überstimmt, dann soll der Name dieses Records in die RadioGroup (oder auch ListBox) eingefügt werden, ansonsten soll nichts geschehen.
while i < 11 do begin
if programm[i].rechenart = rechenart then begin RadioGroup2.Items.Add(programm[i].name); j := j + 1; end; i := i + 1; end; Ich hoffe es ist einigermassen verständlich... Gruss Johanna |
Re: alle ListBox-Einträge erscheinen doppelt!
Huhu,
du verwendest doch gar keine listbox bei diesem code, oder habe ich jetzt irgendwas falsch verstanden? Aber das ändert ja nichts an deinem fehler. Ähm wenn ich mir deinen source so anschaue, dann frage ich mich wofuer du j verwendest. Der restliche code dürfte eigentlich nicht für den Fehler verantwortlich sein. Bist du dir sicher, dass der Fehler an der Stelle liegt? |
Re: alle ListBox-Einträge erscheinen doppelt!
Hast du dir im Degubmodus schonmal dein Record-Array angeschaut? Sicher, daß dort nicht schon alles zweimal steht?
|
Re: alle ListBox-Einträge erscheinen doppelt!
Zitat:
@Johanna88: wie wäre es mit ein bissl mehr code und was bezweckst du mit diesem? |
Re: alle ListBox-Einträge erscheinen doppelt!
Zitat:
|
Re: alle ListBox-Einträge erscheinen doppelt!
Habe es zuerst seeeehr lange mit einer ListBox versucht, und weil es nicht funktioniert hat dann mit einer RadioGroup, aber das Problem war immer das selbe.
Das Record habe ich so definiert (vor dem Variabel-Teil im interface (<- so nennt man das doch?))
Delphi-Quellcode:
Und die "Datenbank" ist eine inc-datei, die unmittelbar vor dieser schlaufe eingefügt wurde.
type TDb = record
rechenart, variante: integer; name: string; end; Sie sieht so aus:
Delphi-Quellcode:
Vielleicht zur Erläuterung: Ich bin daran, ein Rechnungsübungsprogramm für Primarschüler zu machen. Die Rechenart (1-4) ist Addition, Subtraktion, Multiplikation und Division. Jede Rechenart hat verschiedene Varianten, (1-???), also bspw. "Kleines 1x1" (= Variante 1) und "Mittleres 1x1" (= Variante 2).
with programm[1] do begin
rechenart := 1; variante := 1; name := '...bis 100'; end; with programm[2] do begin rechenart := 2; variante := 1; name := '...bis 100'; end; with programm[3] do begin rechenart := 3; variante := 1; name := 'Kleines 1x1'; end; with programm[4] do begin rechenart := 4; variante := 1; name := 'Kleines 1x1'; end; with programm[5] do begin rechenart := 1; variante := 2; name := '..bis 1000'; end; with programm[6] do begin rechenart := 2; variante := 2; name := '...bis 1000'; end; with programm[7] do begin rechenart := 3; variante := 2; name := 'Mittleres 1x1'; end; with programm[8] do begin rechenart := 4; variante := 2; name := 'Mittleres 1x1'; end; with programm[9] do begin rechenart := 3; variante := 3; name := 'Grosses 1x1'; end; with programm[10] do begin rechenart := 4; variante := 3; name := 'Grosses 1x1'; end; Und die ganze Prozedur sieht so aus:
Delphi-Quellcode:
Mir ist gerade aufgefallen, dass ich im interface, eine Variable i eingeführt habe und in der Prozedur ebenfalls. Könnte das Problem damit zusammenhangen?
procedure TForm2.FormPaint(Sender: TObject);
var i: integer; begin Label2.Caption := rechenartStr; Label2.Font.Color := Farbe; anzAufg := 10; if rechenart = 0 then ShowMessage('Wähle eine Rechenart!'); // RadioGroup mit Auswahlmöglichkeiten füllen {$I db.inc} i := 1; j := 0; while i < 11 do begin if programm[i].rechenart = rechenart then begin RadioGroup2.Items.Add(programm[i].name); j := j + 1; end; i := i + 1; end; |
Re: alle ListBox-Einträge erscheinen doppelt!
Delphi-Quellcode:
warum so umständlich?
procedure TForm2.FormPaint(Sender: TObject);
var i: integer; begin Label2.Caption := rechenartStr; Label2.Font.Color := Farbe; anzAufg := 10; if rechenart = 0 then ShowMessage('Wähle eine Rechenart!'); // RadioGroup mit Auswahlmöglichkeiten füllen {$I db.inc} i := 1; j := 0; while i < 11 do begin if programm[i].rechenart = rechenart then begin RadioGroup2.Items.Add(programm[i].name); j := j + 1; end; i := i + 1; end;
Delphi-Quellcode:
Übrigens sollte es mit einer globalen Varaible i eigentlich keine Probleme geben.
procedure TForm2.FormPaint(Sender: TObject);
var i: integer; begin Label2.Caption := rechenartStr; Label2.Font.Color := Farbe; anzAufg := 10; if rechenart = 0 then ShowMessage('Wähle eine Rechenart!'); // RadioGroup mit Auswahlmöglichkeiten füllen {$I db.inc} i := 1; j := 0; { Imo passiert hier dein Fehler: Du fügst bei jedem Repaint wieder Items hinzu: Lösen lässt sich das ganz einfach: } radiogroup2.items.clear; for i := 1 to 10 do if programm[i].rechenart = rechenart then RadioGroup2.Items.Add(programm[i].name); end; |
Re: alle ListBox-Einträge erscheinen doppelt!
Vielen Dank! :dancer:
Super! Jetzt klappt es! Ich versteh nur noch nicht genau wieso. Ich habe doch das Formular nur einmal gezeichnet. Oder wäre es sinnvoller, wenn ich es mit einem anderen Ereignis verknüpft hätte? Wenn ja, welches? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz