• 利用自定义事件实现不同窗体间的通讯 Delphi篇


        要实现子窗体与父窗体之间的通讯,有多种方法(比如:重载子窗体的构造函数,将父窗体的引用作为参数传递给子窗体)。下面我要介绍的是利用自定义事件的方法,它能够最大程度的避免模块之间的耦合,充分体现面向对象的优点。
    下面是实现代码:
    Unit2 //子窗体
    type
       //声明自定义事件的类型(类似于C#中的委托)
       TMyEventHandle = procedure (Sender: TObject; Content: string) of object;
       TForm2 = class(TForm)
         ComboBox1: TComboBox;
         Label1: TLabel;
         procedure ComboBox1Click(Sender: TObject);
       private
         FOnSelectionChanged: TMyEventHandle;
       public
         //声明自定义事件
         property OnSelectionChanged: TMyEventHandle
           read FOnSelectionChanged write FOnSelectionChanged;
       end;
    procedure TForm2.ComboBox1Click(Sender: TObject);
    begin
       //当选择改变时,触发自定义的事件
       if Assigned(FOnSelectionChanged) then
         FOnSelectionChanged(Self, ComboBox1.Text);
    end;
    Unit1 //父窗体
    type
       TForm1 = class(TForm)
         btnOpenForm2: TButton;
         Edit1: TEdit;
         Label1: TLabel;
         procedure btnOpenForm2Click(Sender: TObject);
       private
         m_frm2: TForm2;
         procedure frm2_SelectionChanged(Sender: TObject; Content: string);
       public
         constructor Create(AOwner: TComponent); override;
         destructor Destroy; override;
       end;
    constructor TForm1.Create(AOwner: TComponent);
    begin
       inherited Create(AOwner);
       m_frm2 := TForm2.Create(Self);
       //指定当m_frm2的自定义事件发生时的处理程序
       m_frm2.OnSelectionChanged := frm2_SelectionChanged;
    end;
    destructor TForm1.Destroy;
    begin
       m_frm2.Free;
       inherited Destroy;
    end;
    procedure TForm1.frm2_SelectionChanged(Sender: TObject; Content: string);
    begin
       Edit1.Text := Content;
    end;
    procedure TForm1.btnOpenForm2Click(Sender: TObject);
    begin
       m_frm2.ShowModal;
    end;
  • 相关阅读:
    typeof用法
    图片上传显示图片
    用Express 创建项目
    Express中使用session
    生成一个node项目
    async同步异步
    async异步流程控制
    nodejs并行无关联
    nodejs串行有关联
    nodejs串行无关联
  • 原文地址:https://www.cnblogs.com/see7di/p/2240067.html
Copyright © 2020-2023  润新知