Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   alle ListBox-Einträge erscheinen doppelt! (https://www.delphipraxis.net/79061-alle-listbox-eintraege-erscheinen-doppelt.html)

Johanna88 15. Okt 2006 18:56


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

Helmi 15. Okt 2006 18:59

Re: alle ListBox-Einträge erscheinen doppelt!
 
Hallo Johanna,

zeig doch mal bitte deinen Code um festzustellen,wo der fehler ist.

Johanna88 15. Okt 2006 19:29

Re: alle ListBox-Einträge erscheinen doppelt!
 
Hm... Okay, wird ein bisschen schwierig zum erklären, aber ich versuch es mal...

Delphi-Quellcode:
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;
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.

Ich hoffe es ist einigermassen verständlich...

Gruss
Johanna

furby 15. Okt 2006 20:06

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?

leddl 15. Okt 2006 20:54

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?

semo 15. Okt 2006 20:59

Re: alle ListBox-Einträge erscheinen doppelt!
 
Zitat:

du verwendest doch gar keine listbox bei diesem code, oder habe ich jetzt irgendwas falsch verstanden?
--> sie hat doch explizit erwähnt, dass sie auch eine radiogroup zum testen verwendet hat :-)

@Johanna88: wie wäre es mit ein bissl mehr code und was bezweckst du mit diesem?

furby 15. Okt 2006 21:08

Re: alle ListBox-Einträge erscheinen doppelt!
 
Zitat:

--> sie hat doch explizit erwähnt, dass sie auch eine radiogroup zum testen verwendet hat Smile
Upps sorry. hab ich überlesen :duck:

Johanna88 15. Okt 2006 21:22

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:
type TDb = record
                rechenart, variante: integer;
                name: string;
                end;
Und die "Datenbank" ist eine inc-datei, die unmittelbar vor dieser schlaufe eingefügt wurde.
Sie sieht so aus:
Delphi-Quellcode:
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;
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).

Und die ganze Prozedur sieht so aus:
Delphi-Quellcode:
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;
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?

Namenloser 15. Okt 2006 21:36

Re: alle ListBox-Einträge erscheinen doppelt!
 
Delphi-Quellcode:
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;
warum so umständlich?

Delphi-Quellcode:
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;
Übrigens sollte es mit einer globalen Varaible i eigentlich keine Probleme geben.

Johanna88 15. Okt 2006 22:11

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 06:45 Uhr.
Seite 1 von 2  1 2      

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