17. januar 2010 - 18:56Der er
4 kommentarer og 1 løsning
Avanceret StringReplace
Hej,
Lad mig først fortælle om 2 listboxe. De har samme antal items. Item[0] i den ene hører sammen med Item[0] i den anden på den måde, at Item[0] i den første fx kan være 'navn1' og Item[0] i den anden kan være 'navn1 (og noget mere)'. Det er grundlæggende for alle items i de to listboxe, at de hører sammen som par. De items i listbox2 har altså bare noget mere tekst bagved navnet.
Disse to listboxe vender vi lige tilbage til. Det skal lige nævnes, at der findes en eksakt kopi af listbox1 som vi vælger at kalde listbox3.
Jeg har en combobox (NamesMenu) som indeholder nogle af brugeren udvalgte elementer fra listbox1. Når brugeren har smidt disse over i comboboxen så forsvinder de fra listbox1 (sådan skal det være).
Lad os nu antage, at elementerne i comboboxen er 'navn3', 'navn4', 'navn8', 'navn15'.
Jeg har følgende kode:
for i := 0 to NamesMenu.Items.Count - 1 do begin if NamesMenu.ItemIndex = i then begin tekst[i] := name[i]; end;
"name" er defineret således: name := NamesMenu.Items[i];
og "tekst" har ingen indflydelse nu her.
Altså - 'navn3' er name[0], 'navn4' er name[1], 'navn8' er name[2] og 'navn15' er name[3].
Nu skal det være sådan, at 'navn3', altså element 2 i listbox1, skal udskiftes til 'navn3 (og blablabla)', dvs. element 2 i listbox2. Sådan skal det foregå med alle items i NamesMenu.
How?
Håber ikke det virker for uoverskueligt alt det jeg har skrevet.
procedure TForm1.Button1Click(Sender: TObject); var i,j,k:integer; begin k:= combobox1.ItemIndex; For i:= 0 to Combobox1.Items.Count-1 do begin for j:= 0 to listbox2.Count do if pos(Combobox1.items[i],listbox2.Items[j])=1 then break; ComboBox1.items[i] := listbox2.Items[j]; end; if k>=0 then combobox1.Text := combobox1.Items[k]; end;
Det ser også nogenlunde rigtigt ud, men jeg vil bare ikke have de elementer fra listbox2 ind i min combobox i stedet for dem i listbox1. Der skal stadig kun være elementerne fra listbox1.
Det må jo være linjen efter break der gør det.
Jeg prøver i stedet at gemme listbox2.Items[j] i en TStringList, men det gider den ikke. Så prøver jeg i stedet at gemme dem i en ny listbox:
Listbox4.Items[i] := listbox2.Items[j];
Det gider den heller ikke. Den siger out of bounds i hvert tilfælde. Hvordan undgår jeg dette?
Så skal du nok udskifte ComboBox1.items[i] := listbox2.Items[j]; med Listbox1.items.insert(j,listbox2.Items[j]);
hvis du altså har delete'et Listbox1.item-met da du satte værdien i comboboxen.
Forudsætningen for at dette virker, er enten at du erstatter listbox1 indholdet umiddelbart efter overførslen til comboboxen, eller at rækkefølgen i comboboxen er den samme som den oprindelig var i listbox1, men det angiver du tilsyneladende at den er ?
#4 Jeg fik det godt nok til at virke alligevel med #1. Så mange tak :)
Synes godt om
Ny brugerNybegynder
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.