04. december 2000 - 09:24Der 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 :
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
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;
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.
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
Synes godt om
Ny brugerNybegynder
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.