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?
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
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.