Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objectlist für listview (https://www.delphipraxis.net/173768-objectlist-fuer-listview.html)

Natcree 15. Mär 2013 09:10

Objectlist für listview
 
Habe ein Problem mit dem folgenden Code er sagt array type required. Habe eine Objectlist erstellt und will nun daten aus einer Listview einlesen

Hier mal der Code

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   Item: TListItem;
   i: integer;
   FGesamt: double;
 begin
   FGesamt := 0;
   ListView1.Items.BeginUpdate;
   try
     ListView1.Items.Clear;
     for i := 0 to fobjects.Count - 1 do
       begin

         Item := ListView1.Items.Add;
         Item.Caption := Format('%s €', [tobjectlist1[i].ErsteZahlAsString]);//Hier meckert er
         Item.SubItems.Add(Format('%s €', [Tobjectlist1[i].ZweiteZahlAsString]));
         Gesamt := Gesamt + fobjects[i].Summe;
         Item.SubItems.Add(Format('%.0n €', [FGesamt]));
       end;
   finally
     ListView1.Items.EndUpdate;
   end;
 end;
Kann es sein das ich für die
Delphi-Quellcode:
procedure SetErsteZahlAsString(const Value: string);
function GetErsteZahlAsString: string;
property ErsteZahl: double read FErsteZahl write FErsteZahl;
property ErsteZahlAsString: string read GetErsteZahlAsString write SetErsteZahlAsString;
noch index mit hinzufügen muss???

DeddyH 15. Mär 2013 09:13

AW: Objectlist für listview
 
Zitat:

Delphi-Quellcode:
for i := 0 to fobjects.Count - 1 do

Zitat:

Delphi-Quellcode:
Item.Caption := Format('%s €', [tobjectlist1[i].ErsteZahlAsString]);

fobjects oder tobjectlist1, was denn nun?

Natcree 15. Mär 2013 09:19

AW: Objectlist für listview
 
nehme ich fObjects sagt er in der undeclared identyfier erstezahlas string

DeddyH 15. Mär 2013 09:21

AW: Objectlist für listview
 
Logisch, weil TObject keine solche Property besitzt. Du musst erst in den passenden Typ casten, entweder mit
Delphi-Quellcode:
TIrgendwas(FObjects[i])
oder mit
Delphi-Quellcode:
(FObjects[i] as TIrgendwas)

Natcree 15. Mär 2013 09:26

AW: Objectlist für listview
 
wo muss ich es casten?

DeddyH 15. Mär 2013 09:29

AW: Objectlist für listview
 
Da, wo "er meckert".

Natcree 15. Mär 2013 09:47

AW: Objectlist für listview
 
okay jetzt macht er es. Nun muss ich die daten noch in die Listview eintragen lassen. habe ja noch die Form2 aus der demo . jedoch meckert er jetzt da.

Natcree 15. Mär 2013 10:01

AW: Objectlist für listview
 
ich denke mal ne demo wäre sinnvoller dann kann ich die zusammenhänge besser begreifen. hänge sie doch hier an.

DeddyH 15. Mär 2013 10:07

AW: Objectlist für listview
 
Ich hab sie nicht hier, sondern zu Hause.

Natcree 15. Mär 2013 12:34

AW: Objectlist für listview
 
Habe mal dies hinbekommen es Läuft auch.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Item: TListItem;
   i: integer;
   Gesamt: double;
 begin
   if form2.ShowModal = mrok then begin
   Gesamt := 0;
   ListView1.Items.BeginUpdate;
   try
     ListView1.Items.Clear;
     for i := 0 to fObjects.Count - 1 do
       begin
         Item := ListView1.Items.Add;
         Item.Caption := TIrgendwas(FObjects[i]).ErsteZahlAsString;
         Item.SubItems.Add(TIrgendwas(FObjects[i]).ZweiteZahlAsString);
         FGesamt := FGesamt + TIrgendwas(FObjects[i]).Summe;
         Item.SubItems.Add(Format('%.0n €', [FGesamt]));
      end;
   finally
     ListView1.Items.EndUpdate;
   end;
 end;
end;
Wie kriege ich jetzt die Daten in die List view bei der eingabe in form2 schlies er das Fenster aber in der form1 in der Listview steht nichts drinne

sx2008 15. Mär 2013 12:57

AW: Objectlist für listview
 
Dir fehlt schlicht und ergreifend eine Zwischenvariable, die das Leben viel einfacher macht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Item: TListItem;
   i: integer;
   Gesamt: double;
   irgendwas : TIrgendwas; // die Zwischenvariable
begin
   if form2.ShowModal = mrok then begin
   Gesamt := 0;
   ListView1.Items.BeginUpdate;
   try
     ListView1.Items.Clear;
     for i := 0 to fObjects.Count - 1 do
       begin
         irgendwas := FObjects[i] as TIrgendwas; // ***
         // jetzt kann man ganz bequem mit "irgendwas" weiterarbeiten
         // der Code wird viel klarer und einfacher zu lesen
         Item := ListView1.Items.Add;
         Item.Caption := IntToStr(irgendwas.ErsteZahl);
         Item.SubItems.Add(IntToStr(irgendwas.ZweiteZahl));
         Gesamt := Gesamt + irgendwas.Summe; // nicht "FGesamt" sondern die lokale Variable "Gesamt"
         Item.SubItems.Add(Format('%.0n €', [Gesamt]));
      end;
   finally
     ListView1.Items.EndUpdate;
   end;
 end;
end;

Natcree 15. Mär 2013 13:10

AW: Objectlist für listview
 
Habe Gesamt jetzt unter Privat declariert Daher so

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    Item: TListItem;
    i: integer;
    irgendwas : TIrgendwas;
 begin
    if form2.ShowModal = mrok then begin
    Gesamt := 0;
    ListView1.Items.BeginUpdate;
    try
      ListView1.Items.Clear;
      for i := 0 to fObjects.Count - 1 do
        begin
          irgendwas := FObjects[i] as TIrgendwas;
          Item := ListView1.Items.Add;
          Item.Caption := irgendwas.ErsteZahlasstring;
          Item.SubItems.Add (irgendwas.ZweiteZahlasstring);
          Gesamt := Gesamt + irgendwas.Summe; Variable "Gesamt"
          Item.SubItems.Add(Format('%.0n €', [Gesamt]));
       end;
    finally
      ListView1.Items.EndUpdate;
    end;
  end;
 end;
Er Zeigt aber immer noch nichts in der Listview an. Muss der code in die Form1 oder Form2 wo ich die Daten eingebe und mit ok bestätige ???

DeddyH 15. Mär 2013 13:17

AW: Objectlist für listview
 
Du musst das in Form2 erzeugte Objekt erst einmal Deiner Liste hinzufügen, sonst wird das nix.


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