Avatar billede circadian Nybegynder
19. januar 2010 - 23:32 Der er 11 kommentarer

Tilføje items til Listbox

Hej,

Jeg har to listboxe, som hver indeholder 45 [0..44] elementer til at starte med (altså når programmet starter op). Disse har jeg bare tilføje ovre i object inspector (Items). Den ene hedder NameList og den anden hedder AffList.

Jeg har desuden nogle edit felter, som hører sammen i par. Det første felt hedder Person01, og det ved siden af hedder Person01Aff. Nedenunder findes så det næste par, ved navnene Person02 og Person02Aff, osv. Lige pt. er der 12 par.

Anyways, ovenfor disse edit felter har jeg placeret en knap, og her er hvad der sker ved tryk:

procedure TForm12.MorePersonsBtnClick(Sender: TObject);
begin
  Unit15.Form15.NameList.Items.Add(Person01.Text);
  Unit15.Form15.AffList.Items.Add(Person01Aff.Text);
end;

(Lige nu afprøver jeg bare funktionen for det første par edit felter).

Det vil altså sige, at element nummer 45, dvs. punkt 46, i listboxene bliver til teksterne der står i edit felterne.

Så burde man jo gå ud fra, at listboxene nu har et Item count på 46, ikke?

--------------

Hvordan kan det så være, at når jeg kalder en procedure, som fx indeholder

    for j:= 0 to Unit15.Form15.AffList.Count-1 do

så får jeg "List index out of bounds (46)" ?? Det er jo som om, den ikke har forstået at der nu er 46 items...
Avatar billede spil2vind Nybegynder
19. januar 2010 - 23:40 #1
Prøv at debugge dig frem, måske det giver dig mening
Avatar billede circadian Nybegynder
19. januar 2010 - 23:46 #2
Sorry, men hvor gør man det henne? Er ny i Delphi. Bruger 2010.
Avatar billede a_nor Nybegynder
20. januar 2010 - 08:19 #3
Hvis ikke du har ændret i opsætnigen trykkes F5 på den linie du vil have programmet til at stoppe på under udførslen. Herefter kan man undersøge variables værdi på dette tidspunkt (Inspect).

Der findes iøvrigt mange gode begynderbøger i Delphi.
Avatar billede hreiff Nybegynder
20. januar 2010 - 08:24 #4
Jeg vil mene at
for j:= 0 to Unit15.Form15.AffList.Count-1 do
skal ændres til
for j:= 0 to Unit15.Form15.AffList.items.Count-1 do

Følgende ser ihvertfald ud til at virke:

Hvis jeg opretter en Listbox (ListBox1), en Edit (Edit1), en Button (Button1) og en Label (Label1), og sætter følgende kode i Button1Click;

Procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.items.Add(Edit1.text);
  label1.Caption := IntToStr(Listbox1.Items.Count);
end;

så tilføjes Teksten fra Edit1 når man trykker på knappen, og Count øges med 1 hver gang. Virker upåklageligt.

Hvis man så yderligere tilføjer en ListBox (ListBox2) og en Button (Button2), kan man i Button2Click indsætte;

procedure TForm1.Button2Click(Sender: TObject);
Var i: integer;
begin
  For i := 0 to Listbox1.Items.Count-1 do
  begin
    ListBox2.Items.Add(ListBox1.Items[i])
  end;
end;

Det virker også fint - man får alle Items fra ListBox1 overført til ListBox2 uden fejl på Count
Avatar billede circadian Nybegynder
21. januar 2010 - 16:52 #5
#4
Det var desværre ikke det :(

Tror vist det er bedre at jeg forklarer helt i dybden:

Man kan overføre nogle items fra NameList og over i en anden listbox. Når man trykker på en knap bliver elementerne fra den listbox SAMT det, man eventuelt har skrevet i Person01.Text, lagt over i en combobox ved navn NamesMenu.

Her er hvad der sker, når man trykker på en knap:

// |||------- udskifte name med name OG aff -----------
  k:= NamesMenu.ItemIndex;
  For i:= 0 to NamesMenu.Items.Count-1 do
    begin
    for j:= 0 to Unit15.Form15.AffList.Items.Count-1 do
      if pos(NamesMenu.items[i],Unit15.Form15.AffList.Items[j])=1 then
        break;
    Unit15.Form15.SelectedList.Items[i] := Unit15.Form15.AffList.Items[j];    // i denne linje kommer den med fejl
    // sætte selectedlist ind i array
    feedback_nameaff[i] := Unit15.Form15.SelectedList.Items[i];
    end;
  if k>=0 then
  NamesMenu.Text := NamesMenu.Items[k];
// ------- udskifte name med name OG aff -----------|||

(for dette kan jeg referere til http://www.eksperten.dk/spm/898662)


Fejlen som er nævnt ovenfor er "List index out of bounds (46)".
SelectedList er bare en ny listbox.

feedback_nameaff er bare defineret således:
feedback_nameaff : array[0..24] of string;

Der er kun 25 elementer i denne da jeg ikke har brug for flere.
Avatar billede circadian Nybegynder
21. januar 2010 - 17:04 #6
Skal lige skynde mig at få med også, at fejlen kommer KUN, hvis jeg indsætter noget i Person01.
Avatar billede a_nor Nybegynder
21. januar 2010 - 17:05 #7
i
Unit15.Form15.SelectedList.Items[i] := Unit15.Form15.AffList.Items[j]; 
har du ikke styr på om i er indenfor tilladt interval med den kontrol du laver på namelist.count
Avatar billede a_nor Nybegynder
21. januar 2010 - 17:07 #8
Når selectedlist ern en "ny"listbox, skal du bruge .add for at sætte nye elementer ind
Avatar billede circadian Nybegynder
21. januar 2010 - 17:17 #9
#8
Kan du venligst fortælle mig hvordan jeg skriver den så?

Jeg prøver med Items.Add og AddItem og AddStrings, men intet virker.
Avatar billede a_nor Nybegynder
21. januar 2010 - 21:16 #10
Noget i retning af:
Unit15.Form15.SelectedList.Items.add(Unit15.Form15.AffList.Items[j])
Avatar billede circadian Nybegynder
21. januar 2010 - 22:22 #11
#10
Den kommer desværre med samme fejl :/

Det er altså som om at den ikke godtager, at der faktisk nu befinder sig 46 elementer i AffList - for jeg kan se, at det element man tilføjede til AffList (der ved MorePersonsBtnClick i #0) ikke kommer med i SelectedList.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester