zoukankan      html  css  js  c++  java
  • DelphiXe5中的双向绑定(使用使用TBindScope和TBindExpression,并覆盖AfterConstruction函数)

    在Delphi下等这一功能很久了,虽然C#下早已实现了这一功能。但是在Dephi下尝试这项功能时还是有些许的激动。闲言少絮,直接上代码。

    unit BindingDemo;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.Bind.EngExt, Vcl.Bind.DBEngExt,
      Vcl.StdCtrls, Data.Bind.Components, Vcl.Grids;
    
    type
      TPerson = class(TObject)
      protected
        fName: string;
        fAge: integer;
      procedure
        SetName(const Value: string);
      public
        property Name: string read fName write SetName;
        property Age: integer read fAge write fAge;
      end;
    
    
    type
      /// <summary>
      /// 一个object与ui控件绑定的简单例子
      /// </summary>
      TForm2 = class(TForm)
        bndscp1: TBindScope;
        bndngslst1: TBindingsList;
        Button1: TButton;
        Button2: TButton;
        edt1: TEdit;
        procedure btnLoadClick(Sender: TObject);
        procedure btnSaveClick(Sender: TObject);
      private
        fInitialized: boolean;
        fPerson: TPerson;
        procedure Initialize;
        { Private declarations }
      public
        { Public declarations }
        procedure AfterConstruction; override;
        procedure BeforeDestruction; override;
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm2.AfterConstruction;
    begin
      inherited;
      Initialize;
    end;
    
    procedure TForm2.BeforeDestruction;
    begin
      fPerson.Free;
      inherited;
    end;
    
    procedure TForm2.btnLoadClick(Sender: TObject);
    begin
      fPerson.Name := 'Doogie Howser';
      fPerson.Age := 15;
      bndscp1.DataObject := fPerson;
    end;
    
    procedure TForm2.btnSaveClick(Sender: TObject);
    begin
      bndngslst1.Notify(edt1, '');
    end;
    
    procedure TForm2.Initialize;
    var
      expression: TBindExpression;
    begin
      //Create a binding expression.
      expression := TBindExpression.Create(self);
      expression.ControlComponent := edt1;
      expression.ControlExpression := 'Text';
      //The Text property of Edit1 ...
      expression.SourceComponent := bndscp1;
      expression.SourceExpression := 'Name';
      //... is bound to the Name property of fPerson
      expression.Direction := TExpressionDirection.dirBidirectional;
      //Add the expression to the bindings list.
      expression.BindingsList := bndngslst1;
      //Create a Person object.
      fPerson := TPerson.Create;
    end;
    
    
    { TPerson }
    
    procedure TPerson.SetName(const Value: string);
    begin
      fName := Value;
      //ShowMessage('Name changed to "'+ Value +'"');
    end;
    
    end.

    http://blog.csdn.net/diligentcatrich/article/details/24552151

  • 相关阅读:
    NES游戏历史
    NES资料
    Spring的自动装配
    springmvc框架如何将模型数据传递给视图 也就是Model>view参数的传递
    拆分Spring的配置文件
    Springmvc框架前台传值给controller @Requestparam @RequestMapping
    SpringMVC框架传入Map集合
    SpringMVC框架使用注解编写的处理请求和映射@Controller @RequestMapping
    SpringMVC初尝试
    MVC设计模式
  • 原文地址:https://www.cnblogs.com/findumars/p/5037441.html
Copyright © 2011-2022 走看看