【问题标题】: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 已与表单的任何依赖解耦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2015-08-08
      • 2018-06-19
      • 2011-02-02
      • 2019-02-17
      • 1970-01-01
      • 2017-08-23
      相关资源
      最近更新 更多