Avatar billede alex253 Nybegynder
30. december 2003 - 14:12 Der er 4 kommentarer og
1 løsning

Hvordan laver jeg en Combobox

Hej

Hvordan laver jeg en combobox helt fra bunden???

jeg kunne godt tænke mig at man kunne lave sådan at man kunne vælge et navn i comboboxen og når man har gjort det, så dukker der et telefonnummer op i en Edit.....

M.V.H Alex Andersen
Avatar billede zity Nybegynder
30. december 2003 - 14:25 #1
Procedure Combobox1Change(Sender: TObject);
Begin
if ComboBox1.Text = 'Julemanden' then Edit.Text:='12345678';
end;

Er det det du mener ?
Avatar billede hrc Mester
30. december 2003 - 17:57 #2
Du behøver ikke at opfinde den dybe tallerken endnu en gang.

Compobox'en har det i sig.

type
  TPerson = class
  private
    fName : string;
    fTlf : string;
  public
    constructor Create(const aName, aTlf : string);
    property    Name : string read fname;
    property    Tlf : string read fTlf;
  end;

  TfrmMain = class(TForm)
    cbNames: TComboBox;
    eTlf: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure cbNamesChange(Sender: TObject);
  private
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

{ TPerson }

constructor TPerson.Create(const aName, aTlf: string);
begin
  inherited Create;
  fName := aName;
  fTlf := aTlf;
end;

{ TfrmMain }

procedure TfrmMain.FormCreate(Sender: TObject);
var
  Person : TPerson;
begin
  cbNames.Items.BeginUpdate;
  try
    cbNames.Items.Clear;

    Person := TPerson.Create('Hans Hansen','11223344');
    cbNames.AddItem(Person.Name,Person);
    Person := TPerson.Create('Bent Jørgensen','32671312');
    cbNames.AddItem(Person.Name,Person);
  finally
    cbNames.Items.EndUpdate;
  end; // try
end;

procedure TfrmMain.cbNamesChange(Sender: TObject);
var
  Person : TPerson;
begin
  with cbNames do
    if ItemIndex > -1 then begin
      Person := TPerson(Items.Objects[ItemIndex]);
      eTlf.Text := Person.Tlf;
    end; // if
end;

Hvert Item i en cb har også en plads til et objekt. Derved kan du have data til at følge sammen med det du viser i listen.
Avatar billede hrc Mester
30. december 2003 - 18:01 #3
Bemærk, at jeg bruger AddItem idet jeg her både sætter teksten i listen, men også vedhæfter det Person-objekt jeg oprettet.

Når programmet lukkes, skal disse objekter naturligvis frigives igen - et eller andet sted (OnDestroy eksempelvis):

for i := cbNames.Count - 1 do
  cbNames.Items.Objects[i].Free;

Ved ikke om en cb gør dette automatisk, det er tænkeligt, men må afprøves.
Avatar billede hrc Mester
30. december 2003 - 18:10 #4
Nu har jeg testet om en cb vil frigive eventuelle objekter tilknyttet listen. Det vil den ikke. Det skal man gøre manuelt.

En rettelse: "for i := cbNames.Items.Count - 1 do", så virker den...
Avatar billede hrc Mester
30. december 2003 - 18:13 #5
Hvis du er ny udi Delphi, så skal du ikke blive afskrækket af det efterhånden ret lange eksempel. Det er slet ikke svært og det er intet at regne for kompleksiteten ved at lave en ny komponent.
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