Avatar billede michael-schou Novice
08. maj 2002 - 09:46 Der er 7 kommentarer og
1 løsning

Hvordan kan man undgå fejlen - ListBox1 Out of bounch?

Jeg har lavet et lille program som tilføjer den tekst jeg skrive i et editfelt til en ListBox. Derefter skal man så kunne udskrive det der stå i listboxen på den samme linie i et memofelt.
Mit problem : Hvis der ikke tilføjes noget i ListBox1.Items[1] kommer fejlen listbox1 item out of bounch (1) fordi ListBox1.Items[1] er tom, hvordan kan man forhindre fejlen i nedenstående kode uden at adde en tom linie i listboxen?

<-- KODE

Var
Nr : array [1..3] of String;

procedure TForm1.Button3Click(Sender: TObject);//Exit
begin
Close;
end;

procedure TForm1.Button1Click(Sender: TObject);//Add Edit1 til Label1 & Edit2
begin
Label1.Caption := Edit1.Text;
Edit2.Text := Label1.Caption;
Edit1.Text := '';
end;

procedure TForm1.Edit2Change(Sender: TObject);//Edit2.Text add til LitsBox1
begin
ListBox1.Items.Add(Edit2.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);//ListBox1 udskrives til Memo1
begin
Nr[1] := ListBox1.Items[0];
Nr[2] := ListBox1.Items[1];
Nr[3] := ListBox1.Items[2];

Memo1.Lines.Add(Nr[1] + Nr[2] + Nr[3]);

end;

NB : Den skal udskrive alle Items i listboxen på samme linie i memo feltet!!
Avatar billede dj Nybegynder
08. maj 2002 - 10:15 #1
Istedet for:
Nr[1] := ListBox1.Items[0];
Nr[2] := ListBox1.Items[1];
Nr[3] := ListBox1.Items[2];

Så lav noget ala:

procedure TForm1.Button2Click(Sender: TObject);
var
I: integer;
begin
  for I:=0 to Listbox1.items.count-1 do begin
    if I>2 then break;
    Nr[I+1] := Listbox1.items[I];
  end;
end;

//DJ
Avatar billede compilos Nybegynder
08. maj 2002 - 10:25 #2
Jeg tror du skal prøve noget lignende.

Var
I,J : Integer;

begin
J := 1;
For I = 0 to Listbox.Items.Count
  Begin
    Nr[j] List.Items[i]
    Inc(I)
    Inc(j)
  end;
end;
Avatar billede compilos Nybegynder
08. maj 2002 - 10:25 #3
Du skal nok fjerne linjen Inc(i)
Avatar billede dkn Nybegynder
08. maj 2002 - 12:23 #4
Var
i:integer;
Nr : array [0..2] of String;//Fra 0 til 2
begin
For I := 0 to Listbox1.items.Count-1 do
Nr[I] := ListBox1.Items[I].String;
end;
Avatar billede dkn Nybegynder
08. maj 2002 - 12:24 #5
ups change:
Nr[I] := ListBox1.Items[I].String;
=
Nr[I] := ListBox1.Items.Strings[I];
Avatar billede martinlind Nybegynder
08. maj 2002 - 15:40 #6
procedure TForm1.Button2Click(Sender: TObject);//ListBox1 udskrives til Memo1
VAR
  Strx : String;
  Cnt : Integer;
begin
  Strx := '';
  for Cnt := 0 to ListBox1.Items.Count-1 do
    Strx := Strx + ListBox1.Items[Cnt];
  Memo1.Lines.Add(Strx);
end;

/Martin
Avatar billede martinlind Nybegynder
10. maj 2002 - 10:08 #7
procedure TForm1.Button2Click(Sender: TObject);
var
I: integer;
begin
  for I:=0 to Listbox1.items.count-1 do begin
    if I>2 then break; //<-------------- Totalt unødvendigt !!!!!!!!
    Nr[I+1] := Listbox1.items[I];
  end;
end;
Avatar billede dj Nybegynder
11. maj 2002 - 13:45 #8
Martin>> Flere måder at lave det på, men med den kode jeg lavede der er den ikke unødvendig da hans Nr array er på 3 objecter og det ville derfor give en access violation hvis der var mere end 3 entries i hans Listbox hvis den if-break ikke var der.

Man kan så argumentere for at man kunne sørge for at der ikke var mere end 3 entries i listboxen, men det har jeg ingen mulighed for at se at han har implementeret og better safe than sorry :)

Men ja, unødvendig i den sammenhæng at man nok ikke bør vælge et array til det job som du også er inde på i din løsning.

//DJ
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