公开TStringList

时间:2013-10-07 22:00:03

标签: delphi class tstringlist

我想在我这里的类中实现一些日志记录功能。基本上,我的想法是在包含日志的类中创建一个TStringList。我可以毫无困难地做到这一点,但我的问题是如何在类之外公开它,控件(TMemo或TListBox)可以在包含表单存在时动态显示内容。我可以直接关联类中的控件,但是我想让类保持离开表单代码本身,并在类中创建一个进行此关联的过程。

基本上,如果我的班级中有 LogFile:TStringList ,我该怎么做才能这样添加一行让它从一个独立于类的表单中显示在TMemo中? / p>

1 个答案:

答案 0 :(得分:1)

让表单在您的班级中注册一个回调事件。

如果在向列表中添加项目时分配了此事件,请使用回调发送字符串。

Type
  TMyCallback = procedure(const aLogStr: String) of object;

  TMyClass = Class
    private
      FCallback : TMyCallback;
      FLogFile : TStringList;
      procedure SetCallback(ACallback: TMyCallback);
    public
      property Callback : TMyCallback write SetCallback;
  end;

...
// Update FLogFile
FLogFile.Items.Add(SomeText);
if Assigned(FCallback) then
  FCallBack(SomeText);
...

在您的表单类中:

Type
  TMyForm = Class(TForm)
    private
      procedure IncomingLogString(const AStr: String);
  end;

procedure TMyForm.IncomingLogString(const AStr: String);
begin
  MyMemo.Lines.Add(AStr);
end;

...
// Register callback
FMyClass.Callback := Self.IncomingLogString;

现在,您的TMyClass与表单的任何依赖性脱钩。