Witam
Mam pewien formularz. Na nim 5 editów. Pierwsze 2 edity zawierają nazwę itemu i subitemu (2 kolumny) do listview (vsReport). Pozostałe 3 edity chciałbym, aby zawierały się w tym dodanym itemie (pozycji), jednak aby nie były one widoczne. Później po kliknięciu dwa razy na ten dodany item - chciałbym wyświetlić te dane, które dodałem w tych pozostałych 3 editach. Wszystko było by ok, gdybym dodał jedną pozycję do ListView :). Wtedy przypisuję sobie do zmiennych. Ale co, jeśli dodam 1000 pozycji? Przypuszczam, że muszę dodać do tablicy, ale w jaki sposób? A może jakiś inny pomysł?
0
0
Jeżeli dobrze zrozumiałem chodzi o coś takiego, zamiast obiektu właściwie mógłby być rekord ale wolę tak:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TMyObject = class
private
fField1: string;
fField2: string;
fField3: string;
public
property Field1: string read fField1 write fField1;
property Field2: string read fField2 write fField2;
property Field3: string read fField3 write fField3;
end;
TForm1 = class(TForm)
btnAdd: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
ListView1: TListView;
Button1: TButton;
procedure btnAddClick(Sender: TObject);
procedure ListView1Deletion(Sender: TObject; Item: TListItem);
procedure ListView1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnAddClick(Sender: TObject);
var
Item: TListItem;
begin
Item:= ListView1.Items.Add;
Item.Caption:= Edit1.Text;
Item.SubItems.Add(Edit2.Text);
Item.Data:= TMyObject.Create;
TMyObject(Item.Data).Field1:= Edit3.Text;
TMyObject(Item.Data).Field2:= Edit4.Text;
TMyObject(Item.Data).Field3:= Edit5.Text;
end;
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
TMyObject(Item.Data).Free; //zwalnianie dziala przy Delete, Clear i niszczeniu ListView
end;
procedure TForm1.ListView1Click(Sender: TObject);
begin
if (ListView1.SelCount = 1) then
begin
Edit3.Text:= TMyObject(ListView1.Selected.Data).Field1;
Edit4.Text:= TMyObject(ListView1.Selected.Data).Field2;
Edit5.Text:= TMyObject(ListView1.Selected.Data).Field3;
end;
end;
end.
0
Ogromne dzięki! O to mi właśnie chodziło :) Dzięki!
Temat do zamknięcia.