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 Kann nicht auf dynamisch erstelltes Listview zugreifen? (https://www.delphipraxis.net/59933-kann-nicht-auf-dynamisch-erstelltes-listview-zugreifen.html)

MisterNiceGuy 30. Dez 2005 23:37


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:
var currentlist:TListview
...
      currentlist := TListview(Findcomponent('listview'+inttostr(PageControl1.ActivePageIndex)));
      showmessage(currentlist.Name);
...
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 :)

Hansa 30. Dez 2005 23:42

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Source ist zu knapp. Ist da irgendwo ein Create ?

MisterNiceGuy 30. Dez 2005 23:44

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;

marabu 31. Dez 2005 08:00

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Delphi-Quellcode:
new_listview := TListview.Create(new_Sheet);
Die Methode Form1.FindComponent() findet nur solche Komponenten, deren Owner Form1 ist.

Delphi-Quellcode:
function ActiveListView(pc: TPageControl): TListView;
begin
  Result := pc.ActivePage.FindComponent('ListView' + IntToStr(pc.ActivePageIndex)) as TListView;
end;
Silvestergrüße vom marabu

gfjs 31. Dez 2005 09:09

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Delphi-Quellcode:
new_listview := TListview.Create(new_Sheet);
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:

Delphi-Quellcode:
new_listview := TListview.Create(new_ListView);
Sorry, wenn ich falsch liegen sollte.

mfg gfjs

faux 31. Dez 2005 09:19

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Wieso nicht einfach
Delphi-Quellcode:
list_view := TListView.Create(Form1);

marabu 31. Dez 2005 09:45

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Delphi-Quellcode:
new_listview := TListview.Create(new_ListView);
Nicht so gut, weil der Zufallswert der nicht initialisierten lokalen Variable new_ListView als Owner im Konstruktor übergeben wird.

Delphi-Quellcode:
list_view := TListView.Create(Form1);
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.

marabu

MisterNiceGuy 31. Dez 2005 12:21

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
hm ich könnte die Listviews am Ende ja "Freen" aber wenn ich

Delphi-Quellcode:
new_listview := TListview.Create(Form1);
angebe, dann wird das Listview doch auf der Form erstellt oder irre ich mich da?


Gibt es noch eine andere möglichkeit an den Namen der Komponente ranzukommen außer per FindComponent?

MisterNiceGuy 31. Dez 2005 13:11

Re: Kann nicht auf dynamisch erstelltes Listview zugreifen?
 
Falls es jemanden interessiert ich habs jetzt mit einer eigenen Methode gelöst.

Delphi-Quellcode:
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;
Edit: Waaa es geht aber immernoch nicht, das Problem ist genau das gleiche wie oben!

marabu 31. Dez 2005 13:15

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:
new_Sheet.Tag := Integer(new_ListView);
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 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