Tôi đang cố gắng sử dụng một mảng của một lớp tùy chỉnh làm thuộc tính cho thành phần của tôi, nhưng vấn đề là các giá trị không được lưu vào thành phần, điều đó có nghĩa là nếu tôi đặt các giá trị, tiết kiệm tất cả mọi thứ và mở lại dự án, các giá trị cho các thành phần biến mất ... mã của tôi trông giống như sau:Mảng của một lớp tùy chỉnh là thuộc tính
unit Unit1;
interface
uses Windows, ExtCtrls,Classes,Controls;
type
TMyClass=class(TPersistent)
private
FName: string;
FValue: double;
public
property Name: string read FName write FName;
property Value: double read FValue write FValue;
end;
TMyComponent= class(TCustomPanel)
private
FMyArray: array[0..200] of TMyClass;
function GetmyArray(Index: Integer): TMyClass;
procedure SetMyArray(index: Integer; Value: TMyClass);
public
property myArray[index: Integer]: TMyClass read GetMyArray write SetMyArray;
end;
implementation
function TMyComponent.GetmyArray(Index: Integer): TMyClass;
begin
result:= FmyArray[Index];
end;
procedure TMyComponent.SetMyArray(index: Integer; Value: TMyClass);
begin
FMyArray[index].FName:= Value.FName;
FMyArray[index].FValue:= Value.FValue;
end;
end.
tôi biết rằng rằng tài sản chỉ được công bố có thể được xem trực tiếp, nhưng vấn đề là tài sản của tôi là một mảng và nó không thể được xuất bản ... Một gợi ý mà tôi đã sử dụng là DefineProperties()
để cung cấp luồng tùy chỉnh nhưng tôi không thấy cách làm điều này với một mảng. Khả năng khác mà tôi nghĩ là sửa đổi TMyClass thành một loại lớp mà TMyComponent có thể là cha mẹ của nó, giống như nó được thực hiện trong TChart, bạn có thể thêm các lớp khác nhau của chuỗi vào nó. Nhưng tôi không biết lớp Điều này nên
TMyClass=class(T???????????)
Với rằng tôi có thể đưa ra các myArray tài sản và tạo TMyClass và thêm vào TMyComponent như sau:
MyArray1.parent:= MyComponent1;
MyArray2.parent:= MyComponent2;
...
. Lựa chọn nào tốt hơn? Hay có ý tưởng nào khác tốt hơn?
Tôi đã thử nghiệm phiên bản này và nó hoạt động tốt, tôi chỉ cần kiểm tra trong mã thực sự của tôi mà là một chút phức tạp hơn, cảm ơn rất nhiều – Felipe
Đã tìm kiếm điều tương tự. Câu trả lời tuyệt vời từ Remy, cảm ơn bạn rất nhiều. –