Avatar billede anold Nybegynder
04. december 2000 - 09:24 Der er 2 kommentarer og
1 løsning

Læse i dynamisk oprettet listbox

Jeg har et X antal dynamisk oprettet listbox\'e som brugeren trækker nogle navne over i (Drag-Drop). Nu vil jeg gerne læse hvor mange navne der F.eks er i listbox nr 2
Når jeg opretter listbox\'ne bruger jeg :

FlistBox := TlistBox.Create(Frmpulje.ScrollBox1);
    FlistBox.parent := Frmpulje.ScrollBox1;
    FlistBox.Width := 350;
    FlistBox.Name := \'FlistBox\' + IntToStr(Index+1);

Jeg har prøvet med :
procedure TFrmpulje.BitBtn1Click(Sender: TObject);
var
Index : Integer;
begin
  For Index := 1 To FrmKampPlan.SpinEdit1.Value Do
  Begin
    Label3.Caption := IntTOStr(\'FlistBox\' + IntToStr(Index).items.count);
  End;
end;
men det giver en fejl :
[Error] Puljer.pas(151): Record, object or class type required

Hvad gør jeg forkert??
Avatar billede borrisholt Novice
04. december 2000 - 09:45 #1
Hej Arnold

Du skal bruge en funktion der hedder FindComponent. Med den får su fat i en pointer til dit objekt, som du så kan overstyre til et TListBox.

Sæt en ScrollBox på din dorm sammen med en knap og et edit felt. Tilføj formen et OnCreateEvent og knappen et onklik event og skriv så det følgende kode :

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure ListBoxClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.ListBoxClick(Sender: TObject);
begin
  Caption := IntToStr((Sender as TListbox).Items.Count);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ListBox : TListBox;
  i,j : Integer;
begin
  randomize;
  for i:= 1 to 4 do
  begin
    ListBox := TListBox.Create(ScrollBox1);
    ListBox.Align := alLeft;
    ListBox.Name := \'ListBox\'+IntToStr(i);
    ScrollBox1.InsertControl(ListBox);
    //Stuff some random data into the listbox
    j := Random(30);
    while j>0 do
    begin
      ListBox.Items.Add(IntToStr(Random(500)));
      dec(j);
    end;
    ListBox.OnClick := ListBoxClick;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  ListBox : TListBox;
  p : Pointer;
begin
  p := ScrollBox1.FindComponent(\'ListBox\'+Edit1.Text);
  if p<>nil then
  begin
    ListBox := TListBox(p);
    Caption := IntToStr(ListBox.Items.Count);
  end;
end;


Jens B
Avatar billede picard Nybegynder
04. december 2000 - 09:47 #2
Umiddelbart vil jeg sige at det er denne her linje der er forkert: Label3.Caption := IntTOStr(\'FlistBox\' + IntToStr(Index).items.count);

Deplphi fortolke det som om du prøver at kalde nogle metoder på strengen \"FListBox1\", og det kan jo ikke lade sig gøre.
Du skal i stedetfor bruge listboxens rigtige navn, fåes ved listboxens \"name\" property.

Christian

Avatar billede borrisholt Novice
04. december 2000 - 09:52 #3
prøv med

procedure TFrmpulje.BitBtn1Click(Sender: TObject);
var
  Index : Integer;
  p :  Pointer;
  ListBox : TListBox;
begin
  For Index := 1 To FrmKampPlan.SpinEdit1.Value Do
  Begin
    p:= Frmpulje.ScrollBox1.FindComponent(\'FlistBox\' + IntToStr(Index);
    if p<>nil then
    begin
    ListBox := TListBox(p);
    Label3.Caption := IntTOStr(ListBox.items.count);
    end;

  End;
end;


jens B
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