Tôi đã tạo thành phần có nguồn gốc từ TCustomPanel. Trên bảng điều khiển đó, tôi có một thuộc tính được xuất bản của một lớp có nguồn gốc từ TOwnedCollection. Tất cả đều hoạt động tốt và nhấp vào dấu ba chấm trong trình kiểm tra đối tượng cho thuộc tính đó mở trình chỉnh sửa bộ sưu tập mặc định, nơi tôi có thể quản lý TCollectionItems trong danh sách.Cách gọi trình soạn thảo thuộc tính của thành phần tại thời điểm thiết kế
TMyCustomPanel = class(TCustomPanel)
private
...
published
property MyOwnedCollection: TMyOwnedCollection read GetMyOwnedCollection write SetMyOwnedCollection;
end;
Tôi cũng muốn có thể nhấp đúp vào bảng điều khiển tại thời điểm thiết kế và mở trình chỉnh sửa bộ sưu tập theo mặc định. Tôi đã bắt đầu bằng cách tạo một lớp có nguồn gốc từ TDefaultEditor và đăng ký nó.
TMyCustomPanelEditor = class(TDefaultEditor)
protected
procedure EditProperty(const PropertyEditor: IProperty; var Continue: Boolean); override;
end;
RegisterComponentEditor(TMyCustomPanel, TMyCustomPanelEditor);
Điều này dường như chạy đúng lúc, nhưng tôi bị kẹt về cách khởi chạy trình chỉnh sửa thuộc tính cho bộ sưu tập tại thời điểm đó.
procedure TMyCustomPanelEditor.EditProperty(const PropertyEditor: IProperty; var Continue: Boolean);
begin
inherited;
// Comes in here on double-click of the panel
// How to launch collection editor here for property MyOwnedCollection?
Continue := false;
end;
Bất kỳ giải pháp hoặc cách tiếp cận khác sẽ được đánh giá cao.
Xuất phát từ TComponentEditor và triển khai Get/ExecuteVerb để gọi ShowCollectionEditor hoạt động hoàn hảo. Cảm ơn nhiều. – avenmore
Chà, tôi phải thừa nhận rằng tôi hơi ngạc nhiên khi nó thực sự dễ dàng, nó đúng là từ rất lâu rồi khi tôi cuối cùng làm bất cứ điều gì như thế! –