Avatar billede bobafett Nybegynder
19. marts 2001 - 17:13 Der 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?
Avatar billede martinlind Nybegynder
19. marts 2001 - 18:41 #1
Måske du skal overveje en TOwnedCollection og TCollectionItem, Så får du et træ med plants i, og det vil kunne bruges ligesom et TTreeView.

din GUI må du lige forklare lidt nærmere, med det er jo også datastukturen der er det vigtigste.
Avatar billede lrj Nybegynder
19. marts 2001 - 18:43 #2
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]);

Hjalp det?
Avatar billede bobafett Nybegynder
19. marts 2001 - 20:14 #3
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:

eks:

Oprettet          vist(i comboxen)
Plant1:            Plant1

Plant2:            Plant1
                  Plant1
                  Plant2

Plant3:            Plant1
                  Plant1
                  Plant2
                  Plant1
                  Plant2
                  Plant3
????????????????????????????????

Kode jeg har lavet:

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?

2) hmm, det kigger jeg lige på
           

Avatar billede nico26 Nybegynder
19. marts 2001 - 20:37 #4
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;
Avatar billede nico26 Nybegynder
19. marts 2001 - 20:42 #5
Jeg forstår ikke hvorfor du ikke smider elementerne direkte fra iteratoren over i comboboxen?

PlantComboBox.Items.Clear;

with plantsc.createiterator do
  try
    while not IsDone do
    begin
      PlantComboBox.Items.Add(TPlant(CurrentItem).GetName);
      Next;
    end;
  finally
    Free;
  end;
Avatar billede bobafett Nybegynder
19. marts 2001 - 21:12 #6
ja hvorfor ikke :o)
det virker jo fint

kan du også hjælpe med sp.2?
plantcombobox.items[?????]
Avatar billede nico26 Nybegynder
19. marts 2001 - 21:26 #7
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;
Avatar billede bobafett Nybegynder
19. marts 2001 - 21:33 #8
He he en delphihaj :o)

Jeg takker mange gange
Avatar billede nico26 Nybegynder
19. marts 2001 - 21:39 #9
Det var så lidt
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