组件:从`TComboBox`更新`Items`

时间:2018-03-03 20:53:59

标签: delphi components items

我有一个源自TWinControl的自有组件,其中包含更多标准组件(例如TEditTCombobox)。此子组件未发布,因此其属性不可见。

但其中一些我想让它们可见,但在我的组件下。 我成功处理了TextEnabledReadOnly等属性,但现在我想从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子组件中选择一个项目时,我希望分配对象。

1 个答案:

答案 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;