Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - problem mit listbox, löschen (und noch mehr)


Chatfix - Do 31.10.02 15:14
Titel: problem mit listbox, löschen (und noch mehr)
hallo, hab mal seit langen wieder ein problem, es scheint mir ziemlcih einfach zu lösen nur ich glaub ich hab in meiner hektik wieder irgendwas vergessen.. zu den programminfos..

es können mitarbeiter eingegeben werden, die in einer ini (name1=, name2=) usw. gespeichert werden.
die namen werden beim programmstart zusätzlich in die stringlist form2.namen eingelesen. die anzahl der namen wird in der ini, und im programm unter anzahlnamen gespeichert.

nun habe ich folgendem code, um einen mitarbeiter zu löschen (die mitarb. werden in einer listbox angezeigt)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
for i:=form1.anzahlnamen-1 downto 0 do
  begin
    if listbox1.Selected[i] then
    begin
      listbox1.Items.Delete(i);
      form2.namen.Delete(i);
      form1.anzahlnamen:=form1.anzahlnamen-1;
      deletefile(form3.path+'\mitarb.ini');
      namenini:=Tinifile.Create(form3.path+'\mitarb.ini');
      try
        for j:=1 to form1.anzahlnamen do
        begin
          namenini.WriteString('Namen','name'+inttostr(j),form2.namen.Strings[j]);
        end;
      finally
        namenini.Free;
      end;
      break;
    end;


es kommt immer Listenindex überschreitet das maximum...
ka was cih vergessen hab.. fällt euch was ein?

ps sorry wegen dem titel, mir is nix eingefallen


Raphael82 - Do 31.10.02 16:09


Quelltext
1:
2:
try 
        for j:=1 to form1.anzahlnamen do


In der ersten Schleife hast du noch "anzahlnamen-1" geschrieben, da der Listenindex bei 0 beginnt. Wahrscheinlich ist das der Fehler.

MfG, Raphael


Chatfix - Do 31.10.02 17:55

ja ok habs.. danke.. ich sag ja schusselfehler :D


Raphael82 - Do 31.10.02 18:11

Gern geschehen, passiert mir auch dauernd.. :wink:


Tino - Fr 01.11.02 11:30
Titel: Re: problem mit listbox, löschen (und noch mehr)
Chatfix hat folgendes geschrieben:
die anzahl der namen wird in der ini, und im programm unter anzahlnamen gespeichert.

Warum nimmst Du nicht die Eingenschaft Count der StringList um die Anzahl der Einträge zu erhalten?

Gruß
TINO


Chatfix - Fr 01.11.02 15:12

weil es auch einträge gibt die in der listbox nicht dargestellt werden, und diese müssen beim löschen auch berücksichtigt werden, das ist ja nur ein kleiner code-schnipsel der noch erweitert wird


Tino - Fr 01.11.02 21:12

Chatfix hat folgendes geschrieben:
weil es auch einträge gibt die in der listbox nicht dargestellt werden

Ich gehe mal davon aus das Du damit meinst das die Items in der ListBox nicht exsistieren. Wenn es so ist kann dieser Code aber Probleme machen:

Quelltext
1:
2:
3:
for i:=form1.anzahlnamen-1 downto 0 do
 begin
  if listbox1.Selected[i] then

Gruß
TINO


Chatfix - Sa 02.11.02 18:27

oh ja.. stimmt... da muss ich doch die count eigenschaft nehmen...

danke für den hinweis!!