我有一个源自TWinControl
的自有组件,其中包含更多标准组件(例如TEdit
,TCombobox
)。此子组件未发布,因此其属性不可见。
但其中一些我想让它们可见,但在我的组件下。
我成功处理了Text
,Enabled
,ReadOnly
等属性,但现在我想从Items
添加TComboBox
。
这意味着,在我编辑自己的Items
属性后,来自Items
子组件的TCombo
也会发生同样的情况。
[ComponentPlatformsAttribute(pidWin32 or pidWin64)]
TSodaEditor = class(TWinControl)
private
FEdit: TEdit;
FCombo: TComboBox;
FAlignment: TAlignment;
FItems: TStrings; //<-------
FText: TCaption;
FOnChange: TNotifyEvent;
FOnEnter: TNotifyEvent;
FOnExit: TNotifyEvent;
FOnClick: TNotifyEvent;
FOnDblClick: TNotifyEvent;
FOnKeyDown: TEvent_OnKeyDown;
FOnKeyUp: TEvent_OnKeyUp;
FOnKeyPress: TEvent_OnKeyPress;
//....
protected
//....
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
property Items: TStrings read FItems write SetItems;
property Text;
property Visible;
property Enabled;
property Align;
property Font;
property ParentFont;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnExit;
property OnEnter;
property OnClick;
property OnDblClick;
property TabOrder;
end;
任何简单的方法,还是应该覆盖TStrings
中的某些方法,以便捕获Items
下的更改?
更新
通过此Items
我想使用AddObject
来处理对象。因此,当我从TCombo
子组件中选择一个项目时,我希望分配对象。
答案 0 :(得分:1)
您只需从您自己的TComboBox.Items
getter / setter中公开直接对Items
的访问权限即可。根本不需要FItems
成员。
property Items: TStrings read GetItems write SetItems;
function TSodaEditor.GetItems: TStrings;
begin
Result := FCombo.Items;
end;
procedure TSodaEditor.SetItems(AValue: TStrings);
begin
FCombo.Items.Assign(AValue);
end;