覆盖基类属性的读写

时间:2015-05-06 11:28:41

标签: delphi

我想创建一个新组件,其行为与TEdit完全相同,但有一些字符替换为输入的文本。 例如,当有人输入' abc'进入新组件时,我希望Text-Property在源代码中读取时返回' aac'

type
  TMyEdit = class(TEdit)
  public
    property Text : TCaption read GetText;
  end;

像这样。

是否可以使用此属性的新读取函数覆盖现有属性,而不更改此属性的写入函数?

此致

2 个答案:

答案 0 :(得分:1)

如前所述:

  

最好的方法是使用TMaskEdit

但是如果你真的想要实现这个行为,那么就可以这样做:

type
  TMyEdit = class(TEdit)
  private
    function GetText: TCaption;
    procedure SetText(const Value: TCaption);
  public
    property Text: TCaption read GetText write SetText;
  end;

{ TMyEdit }

function TMyEdit.GetText: TCaption;
begin
  Result := 'TMyEdit' + inherited Text;
end;

procedure TMyEdit.SetText(const Value: TCaption);
begin
  inherited Text := Value;
end;

总之,我创建了GetTextSetText settext,只需调用继承的Text属性,而GetText更改结果

答案 1 :(得分:0)

TMyEdit = class(TEdit)
protected
   procedure Change; override;
 end;

procedure TMyEdit.Change;
begin
  Self.Text := StringReplace(Self.Text, 'aaa', 'ccc');
  inherited;
end;