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

问题描述 投票:-1回答:1

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

但其中一些我想让它们可见,但在我的组件下。我成功处理了一些属性,如TextEnabledReadOnly,但现在我想添加来自ItemsTComboBox

这意味着,在我编辑自己的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子组件中选择一个项目时,我想获得分配的对象。

delphi components items
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.