zoukankan      html  css  js  c++  java
  • 利用自定义事件实现不同窗体间的通讯 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;
  • 相关阅读:
    解决org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryVal
    学java快2月了,对其应该有点清晰的认识了
    Linux(CentOS)挂载移动硬盘
    SEVERE: A child container failed during start
    JSTL 标签 详解
    转载自MSDN:Implementing a Membership Provider
    一个比较实用的服务器端模拟客户端Alert的代码
    简单的SQL分页法
    转载:Global.asax 文件 使用参考
    转载:缓存 Cache
  • 原文地址:https://www.cnblogs.com/see7di/p/2240067.html
Copyright © 2011-2022 走看看