Delphi-PRAXiS

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:

Blup 18. Dez 2008 08:15

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Sinnvoller erscheint mir ein TabControl mit einem TListView, dessen Inhalt beim Wechseln des Tabs umgeschalten wird.
Daten sollte man sowieso nicht in der Oberfläche halten, sondern nur anzeigen oder bearbeiten.

TheMiller 18. Dez 2008 10:11

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
Guten Morgen!

Zitat:

beim Erzeugen der ListViews hast du kein Name für den ListView angegeben.
Doch hatte ich. Ich habe die Code-Zeile nur ausversehen nicht mitkopiert. Die ListView's heißen "lv0-lvXX"

Zitat:

Wenn Du schon irgendwelche Controls dynamisch erzeugst, wieso hälst du die nicht in einer Liste oder einer ähnlich gearteten Struktur?
Genau das habe ich dann gestern Abend noch gemacht und funktioniert prima. Danke

Zitat:

Daten sollte man sowieso nicht in der Oberfläche halten, sondern nur anzeigen oder bearbeiten.
Und da verstehe ich nicht ganz genau was du meinst.

Grüße

alzaimar 18. Dez 2008 18:39

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

Zitat von DJ-SPM
Zitat:

Daten sollte man sowieso nicht in der Oberfläche halten, sondern nur anzeigen oder bearbeiten.
Und da verstehe ich nicht ganz genau was du meinst.

Trennung von Funktion und Darstellung-

himitsu 19. Dez 2008 08:20

Re: Wie komme ich an dyn. ListView auf PageControl ran?
 
[leichtOT]Ach deswegen halten mich viele immer für so böse und widerspenstig?

hab letztens mal die Oberfläche selbst komplett als Speicherort "mißbraucht"
(siehe Editor, welcher aber auch ein Prachtbeispiel dafür ist, wie man .Tag ausnutzen und fast alle Funktionen nahezu unbegrenzt mehrfach nutzen kann kann)

Es kommt da wohl auf Nutzen und Aufwand an,
auch wenn ich es vermutlich meistens auch so seh, wie alzaimar[/leichtOT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.

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