Avatar billede circadian Nybegynder
16. januar 2010 - 02:04 Der er 13 kommentarer og
1 løsning

Listbox items til array

Hej,

Jeg har en listbox med 45 elementer, og dem vil jeg havde smidt ind i et string array.

var namelistitems : array[0..44] of string;

Jeg prøver at gøre følgende, men får Access violation fejl.

for i := 0 to Unit13.Form13.NameList.Count - 1 do
  begin
  namelistitems[i] := Unit13.Form13.NameList.Items[Unit13.Form13.NameList.ItemIndex];
  end;
Avatar billede kroning Nybegynder
16. januar 2010 - 11:29 #1
Nok fordi din NameList.Count - 1 er større end 44, prøv at bruge debuggeren.

P.S. D bør navngive dine units og forme og koden burde se således ud:

for i:=0 to NameList.Count - 1 do
begin
  namelistitems[i]:=NameList.Items[NameList.ItemIndex];
end;
Avatar billede kroning Nybegynder
16. januar 2010 - 11:31 #2
Eller også er det fordi din NameList.ItemIndex er -1 og kode burde nok være:

for i:=0 to NameList.Count - 1 do
begin
  namelistitems[i]:=NameList.Items[i];
end;
Avatar billede kroning Nybegynder
16. januar 2010 - 11:33 #3
Nu ved jeg ikke hvorfor du vil gemme dine strenge i et Array men jeg ville nok vælge en TStringList.
Avatar billede spil2vind Nybegynder
16. januar 2010 - 11:38 #4
Det er fordi ItemIdex ikke har den værdi du ønsker, du skal skrive:
for i := 0 to Unit13.Form13.NameList.Count - 1 do begin
  namelistitems[i] := Unit13.Form13.NameList.Items[ i ];
end;
Avatar billede spil2vind Nybegynder
16. januar 2010 - 11:39 #5
Undskyld, havde ikke set at der var andre svar
Avatar billede kroning Nybegynder
16. januar 2010 - 11:46 #6
Hvis du vil bruge en TStringLIst i stedet for et Array så kan det gøres således:

//Først defineres en stringlist
var
NameListItems : TStringList;
begin
//Så oprettes den
NameListItems:=TStringList.Create;

//Og for at overføre dine elementer fra din ListBox
NameListItems.AddStrings(NameList.Items);
end;
Avatar billede circadian Nybegynder
17. januar 2010 - 16:10 #7
#6
Jeg tror jeg vælger at gøre det i stedet for. Ser ud til at virke :) Du smider bare et svar.

Dog kunne jeg godt tænke mig en uddybning til dette i #1:
"P.S. Du bør navngive dine units og forme..."

Det kunne jeg virkelig også godt tænke mig at gøre, fordi jeg har 15 Units lige nu, og det er ikke let at huske hvad der er hvad. Grunden til at jeg ikke har omdøbt dem osv. er, at jeg engang prøvede på det, og så spillede det bare overhovedet ikke sammen. Fik errors og det hele.

Desuden, selvom jeg fx lavede Unit13 om til at hedde noget andet, hvordan kan du så undlade at skrive "xxx.yyy." foran NameList? For den befinder sig ikke på Unit1 hvor koden i #0 hører til.
Avatar billede kroning Nybegynder
18. januar 2010 - 08:45 #8
Jeg bruger Delphi 7 og når jeg gemmer så spørger den om et navn til uniten hvis den ikke har været gemt tidligere.

Navnet på dine forme kan du indtaste i Object Inspectoren under Name

Hvis du tilføjer din Unit til din uses behøver du ikke at angive Unit navnet dvs. at dette:
Unit13.Form13.NameList.Count
kan ændres til dette:
Form13.NameList.Count

Hvis det er muligt så bør du flytte koden fra #1 over i din Unit13 så kan koden ændres til dette:
NameList.Count

Hvis koden bliver aktiveret fra din Unit1 f.eks. ved tryk på en knap så bør koden stadig holden i Unit13 men kan så her puttes ind i en procedure som så kan kaldes fra Unit1 når der trykkes på knappen, f.eks.
Form13.GorTing;
Avatar billede kroning Nybegynder
18. januar 2010 - 08:48 #9
Glemte at nævne at jeg altid giver en Unit/Form det samme navn (næsten), f.eks. hvis jeg har en form som jeg har navngivet FarveSetupForm så gemmer jeg uniten med navnet FarveSetupUnit
Avatar billede circadian Nybegynder
18. januar 2010 - 17:05 #10
Tak for tips - lige et hurtigt spørgsmål her til sidst; jeg har lige prøvet at omdøbe min Unit1 til MainUnit og Form1 til MainForm. Når jeg prøver at compilere, så siger den 'File not found: Unit1.dfm'. Og den findes heller ikke, men det gør MainUnit.dfm. Hvor kan jeg ændre det?

Pfh. tak.
Avatar billede kroning Nybegynder
18. januar 2010 - 17:24 #11
Hvordan omdøber du ?
Avatar billede circadian Nybegynder
18. januar 2010 - 17:28 #12
Ovre i project manager klikker jeg på Unit1, går over i object inspector, ændrer file name fra Unit1.pas til MainUnit.pas. Klikker på Form1 i design view'et, name -> MainForm i stedet for Form1.

Run (F9): error.
Avatar billede kroning Nybegynder
18. januar 2010 - 17:41 #13
I min Delphi 7 har jeg ikke noget der hedder file name i object inspector, jeg skal ind  file menuen og vælge "Save As" og når jeg så har gemt f.eks. Unit1 som NyNavnUnit så skal jeg derefter manuelt ind i mappen og slette Unit1 filerne som så ikke længere bruges.
Avatar billede circadian Nybegynder
18. januar 2010 - 17:47 #14
Den brokker sig stadig over manglende .dfm, men det må jeg sidde og rode med.

Takker!
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