![]() |
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);
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Das ist ja leider nicht mehr das Problem, ich finde das Listview ja nun, aber ich kann keine neuen Items hinzufügen...
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
hab grad rausgefunden, dass das currentlist nil ist...
Oh Gott da ist ein Fehler in der Funktion FindListview ich hab einmal die lokale Variable i statt j verwendet... jetzt geht es ;) |
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Liste der Anhänge anzeigen (Anzahl: 1)
puh jetzt geht es und wen es interessiert was das ganze soll kann sich da unten das Ergebnis angucken :D
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
Warum schreiben eigentlich fast alle Standard falsch???? :gruebel:
|
Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
danke für den Hinweis :) Vielleicht weil man an eine Art denkt? :gruebel:
Wird gleich geändert! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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