![]() |
Kann nicht auf dynamisch erstelltes Listview zugreifen?
Hi ich erstelle ein Listview dynamisch und gebe ihm einen Namen. Jetzt will ich auf eben diesen Namen zugreifen, aber ich bekomme jedesmal eine Fehlermeldung.
Der Code sieht wie folgt aus:
Delphi-Quellcode:
Kann sich jemand denken wo ich den Fehler gemacht habe? Hab noch nicht so viel Erfahrung im Erstellen von Kompos zur Laufzeit und lern grade :)
var currentlist:TListview
... currentlist := TListview(Findcomponent('listview'+inttostr(PageControl1.ActivePageIndex))); showmessage(currentlist.Name); ... |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Source ist zu knapp. Ist da irgendwo ein Create ?
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Japp der gesamte Code des Creates ist hier:
Delphi-Quellcode:
var new_sheet:TTabSheet;
new_listview:TListview; new_button:TButton; begin new_Sheet := TTabSheet.Create(PageControl1); new_Sheet.Caption := inputbox('Neue Liste','Bitte Namen für die Liste eingeben','Neue Liste'); new_Sheet.PageControl := PageControl1; new_listview := TListview.Create(new_Sheet); new_listview.Name := 'listview'+inttostr(pagecontrol1.PageCount); showmessage(new_listview.Name); new_listview.Parent := new_Sheet; new_listview.ViewStyle := vsreport; //new_listview.OnSelectItem := ListView1SelectItem; //new_listview.OnColumnClick := ListView1ColumnClick; //new_Listview.OnCompare := ListView1Compare; //new_listview.OnCustomDrawItem := ListView1CustomDrawItem; new_listview.columns := listview1.columns; new_listview.Width := listview1.Width; new_listview.Height := listview1.Height-30; new_listview.Anchors := [akbottom, aktop, akleft, akright]; new_listview.GridLines := true; |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Delphi-Quellcode:
Die Methode Form1.FindComponent() findet nur solche Komponenten, deren Owner Form1 ist.
new_listview := TListview.Create(new_Sheet);
Delphi-Quellcode:
Silvestergrüße vom marabu
function ActiveListView(pc: TPageControl): TListView;
begin Result := pc.ActivePage.FindComponent('ListView' + IntToStr(pc.ActivePageIndex)) as TListView; end; |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Delphi-Quellcode:
Vorsicht - ich bin ein ziemlicher Anfänger; deshalb bin ich mir nicht sicher, ob ich richtig liege. Ich könnte mir aber vorstellen, dass es heißen sollte:
new_listview := TListview.Create(new_Sheet);
Delphi-Quellcode:
Sorry, wenn ich falsch liegen sollte.
new_listview := TListview.Create(new_ListView);
mfg gfjs |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Wieso nicht einfach
Delphi-Quellcode:
list_view := TListView.Create(Form1);
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Delphi-Quellcode:
Nicht so gut, weil der Zufallswert der nicht initialisierten lokalen Variable new_ListView als Owner im Konstruktor übergeben wird.
new_listview := TListview.Create(new_ListView);
Delphi-Quellcode:
Kann man machen - aber wenn die dynamisch erzeugten TabSheets auch dynamisch zerstört werden, dann sollten sie schon Owner ihrer controls sein, damit sie auch deren Speicher freigeben.
list_view := TListView.Create(Form1);
marabu |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
hm ich könnte die Listviews am Ende ja "Freen" aber wenn ich
Delphi-Quellcode:
angebe, dann wird das Listview doch auf der Form erstellt oder irre ich mich da?
new_listview := TListview.Create(Form1);
Gibt es noch eine andere möglichkeit an den Namen der Komponente ranzukommen außer per FindComponent? |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Falls es jemanden interessiert ich habs jetzt mit einer eigenen Methode gelöst.
Delphi-Quellcode:
Edit: Waaa es geht aber immernoch nicht, das Problem ist genau das gleiche wie oben!
function TForm1.FindListview(const Name: string): TListview;
var i,j: Integer; begin for i:=0 to form1.PageControl1.PageCount-1 do for j:=0 to pagecontrol1.Pages[i].ComponentCount-1 do if pagecontrol1.Pages[i].Components[j] is TListview then begin result := TListview(pagecontrol1.Pages[i].Components[i]); if ansiSameText(Result.Name,Name) then exit; end; Result := nil; end; |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Originell dein Code ist.
Wenn du pro TabSheet nur eine ListView hast, dann würde ich mir die im TabSheet.Tag merken und die Sucherei entfällt:
Delphi-Quellcode:
marabu
new_Sheet.Tag := Integer(new_ListView);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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