【问题标题】:Exposing A TStringList暴露一个 TStringList
【发布时间】:2013-10-07 22:00:02
【问题描述】:
我想在我在这里的一个类中实现一些日志记录功能。基本上,我的想法是在包含日志的类中创建一个 TStringList 。我可以毫无困难地做到这一点,但我的问题是如何在类之外公开它,如果包含表单存在,控件(TMemo 或 TListBox)可以动态显示内容。我可以与类中的控件建立直接关联,但我希望使类与表单代码本身保持谨慎,并在类中创建一个过程来建立这种关联。
基本上,如果我的班级中有 LogFile: TStringList,我该如何制作它,以便在那里添加一行使其从与班级分开的表单中显示在 TMemo 中?
【问题讨论】:
标签:
delphi
class
tstringlist
【解决方案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 已与表单的任何依赖解耦。