Avatar billede circadian Nybegynder
17. januar 2010 - 18:56 Der 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.
Avatar billede a_nor Nybegynder
17. januar 2010 - 22:37 #1
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;
Avatar billede a_nor Nybegynder
17. januar 2010 - 22:42 #2
Jeg går ud fra det er sådan du mener, elementerne eksisterer jo ikke mere i listbox1.
Avatar billede circadian Nybegynder
17. januar 2010 - 23:30 #3
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?
Avatar billede a_nor Nybegynder
18. januar 2010 - 00:31 #4
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 ?
Avatar billede circadian Nybegynder
18. januar 2010 - 00:42 #5
#4
Jeg fik det godt nok til at virke alligevel med #1. Så mange tak :)
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