Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie komme ich an dyn. ListView auf PageControl ran? (https://www.delphipraxis.net/126089-wie-komme-ich-dyn-listview-auf-pagecontrol-ran.html)

TheMiller 17. Dez 2008 20:43


Wie komme ich an dyn. ListView auf PageControl ran?
 
Hallo,

ich erstelle auf 3 TabSheets in einer PageControl jeweils eine ListView dynamisch. Dynamisch deshalb, weil die TabSheets auch dynamisch erstellt werden - abhängig von der Useranzahl aus der DB.

Nun habe ich also folgende "Hierachie":

Delphi-Quellcode:
PageControl
    Tab0
        lv0
    Tab1
        lv1
    Tab2
        lv2
Wie komme ich jetzt mittels FindComponent an die ListView lv2 ran? Alles, was ich probiert habe, hat entweder keinen Effekt, oder bringt mir eine AV. Hier mein letzter Versuch, bevor ich mich entschieden habe, hier einen Thread zu eröffnen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lv: TListView;
begin
  lv:=TListView(PageControl1.Pages[0].FindComponent('lv0')));
  lv.Free; // oder sonst irgendwas...
end;
Danke im Voraus

mkinzler 17. Dez 2008 20:53

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Was ist der Owner des ListViews?

TheMiller 17. Dez 2008 20:55

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Owner ist Form1

mkinzler 17. Dez 2008 21:12

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Dann musst du auch die befragen:
Form1.FindComponent()

TheMiller 17. Dez 2008 21:17

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Danke,

aber so geht's auch nicht.

Delphi-Quellcode:
(Form1.FindComponent('lv0') as TLIstView).GridLines:=True;
Danke

hoika 17. Dez 2008 21:50

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Hallo,

< ich erstelle auf 3 TabSheets in einer PageControl jeweils eine ListView dynamisch. >

Zeig mal den Code des Erzeugens.

Ausserdem fehlt ein Assert

Delphi-Quellcode:
lv:=TListView(PageControl1.Pages[0].FindComponent('lv0')));
Assert(lv<>NIL, 'argzzz LV is NIL');
if lv<>NIL then
begin
  lv.Free; // oder sonst irgendwas...
end;


Heiko

Hawkeye219 17. Dez 2008 21:59

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Hallo,

wenn du die ListViews selbst erzeugst, warum merkst du dir nicht einfach die Referenzen beim Erstellen (Array, TList, TComponentList...)? Damit würde doch die ganze Sucherei über FindComponent entfallen.

Gruß Hawkeye

TheMiller 17. Dez 2008 22:24

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Also,

die TabSheets erstelle ich so:

Delphi-Quellcode:
   
    Tab:=TTabSheet.Create(PageControl1);
    Tab.Name:='Tab'+IntToStr(RecNo);
    Tab.Caption:=Form1.ZQuery1.FieldByName('realname').AsString;
    Tab.Parent:=PageControl1;
    Tab.PageControl:=PageControl1;
und so erzeuge ich die ListViews!

Delphi-Quellcode:
    lv:=TListView.Create(Form1);
    lv.ViewStyle:=vsReport;
   
    for i:=0 to 4 do
    begin
      lv.Columns.Add;
    end;
   
    lv.Columns.Items[0].Caption:='Datum';
    lv.Columns.Items[1].Caption:='Uhrzeit';
    lv.Columns.Items[3].Caption:='Kommentar';
    lv.Columns.Items[4].Caption:='Eingetragen von';

EDIT: Ich habe die Listviews jetzt doch in einem array gespeichert. Funktioniert. Danke

hoika 18. Dez 2008 05:59

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Hallo,

beim Erzeugen der ListViews hast du kein Name für den ListView angegeben.
Deshalb war FindComponent immer NIL -> Schutzverletzung.


Heiko

alzaimar 18. Dez 2008 07:05

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Wenn Du schon irgendwelche Controls dynamisch erzeugst, wieso hälst du die nicht in einer Liste oder einer ähnlich gearteten Struktur? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz