19. marts 2001 - 17:13Der er
8 kommentarer og 1 løsning
TList(container) ind i en combobox(bla.)
Klasse:
TPlant = class private name: string; id: string; location: string; description: string; tankgroups: TList; public constructor create(na, i: string); destructor destroy; procedure addTankgroup(tkg: TTankgroup); procedure removeTankgroup(tkg: TTankgroup); function getPlantList: TList; function getName: String; procedure saveName(nam: string); function getID: string; procedure saveID(i: string); function getLocation: string; procedure saveLocation(loc: string); function getDescription: string; procedure saveDescription(des: string); end;
Container:
TPlantContainer = class private plants: TList; public constructor create; procedure addPlant(p: TPlant); function findPlant(i: string): TPlant; procedure removePlant(p: TPlant); function findPlantsTankgroups: TList; function createIterator: Titerator; end;
TPlantIterator = class private PlantContainer: TPlantContainer; aktuel: integer; public constructor create(p: TPlantContainer); procedure first; procedure next; function isDone: boolean; function currentItem: TObject; end;
Form:
combobox: TCombobox; locEdit: TEdit;
Hvordan gør man:
1) comboboxen Skal indeholde alle plants, dvs at når man trykker på comboboxen, kommer navnene(name) frem på de plants der ligger i containeren: plants
2) Når man trykker på en af plant\'sene i comboboxen, så skal dens location(variablen) vises i locEdit-feltet?
1) Du er nødt til selv at lave en løkke som løber din TPlantIterator igennem og tilføjer hver enkelt til din liste (med combobox1.items.add(current.name); - lidt i den stil).
2) Så er du nødt til at lave et opslag i din plant-liste. Du har indexet på den der er klikket på (combobox1.itemindex). Du kan jo så finde den streng der identificerer en plant med plantcontainer.findplant(combobox1.item[combobox1.itemindex]);
1) Ok, det var da et skridt i den rigtige retning, nu har jeg fået noget i min combobox, men..:) når jeg laver flere end et plant så vises de flere gange i comboxen:
procedure TPlantForm.showplants(liste: TList); var i: integer; begin for i:= 0 to liste.count -1 do PlantComboBox.items.add(TPlant(liste[i]).getName); end;
procedure TPlantForm.init; var itr: Titerator; l: Tlist; begin itr := plantsc.createIterator; l := Tlist.create; itr.first; while (not itr.isDone) do begin l.add(itr.currentItem); itr.next; end; itr.free; showplants(l); end;
init bliver så kaldt i opretknappen hvorfor gør den det?
procedure TPlantForm.showplants(liste: TList); var i: integer; begin PlantComboBox.Items.Clear; for i:= 0 to liste.count -1 do PlantComboBox.items.add(TPlant(liste[i]).getName); end;
først laver du en lille ændring når du løber iteratoren igennem (addobject)
PlantComboBox.Items.Clear;
with plantsc.createiterator do try while not IsDone do begin PlantComboBox.Items.AddObject(TPlant(CurrentItem).GetName, CurrentItem); Next; end; finally Free; end;
og her er Comboens OnChange event:
procedure TForm1.PlantComboBoxChange(Sender: TObject); begin Edit1.Text := TPlant(PlantComboBox.Items.Objects[PlantComboBox.ItemIndex]).Location; end;
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.