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

  • 相关阅读:
    优化cocos2d/x程序的内存使用和程序大小
    cocos2d-x移植:xcode到eclipse
    程序员在编程工作中痛苦的压抑着自己某些强烈的情绪
    C++语言的一些问题
    基数排序-图非常清晰明了
    【Cocos2d-X(1.x 2.x) 修复篇】iOS6 中 libcurl.a 无法通过armv7s编译以及iOS6中无法正常游戏横屏的解决方法
    《C++ Primer》笔记-inline内联函数
    走出你的舒适区
    UDP广播与多播
    测试问题反馈需要包含内容总结
  • 原文地址:https://www.cnblogs.com/findumars/p/5037441.html
Copyright © 2011-2022 走看看