代码改变世界

应用软件里基本信息设置的处理方法

2011-06-29 15:11  圣二十一郎  阅读(446)  评论(2编辑  收藏  举报

 在应用软件中,,有大量的基本信息设置窗体,如:部门设置,人员设置等。

问题:

  Form1窗体上有增加,修改,删除按钮和一个dbgrid表格。点击增加按钮,弹出form2增加内容窗体,

  在form2上有个追加选项框,可以一直增加而不用退出form2窗体。

  不知道大家是如何处理form1窗体和form2窗体之间的的内容同步呢?

当然了,方法有一大堆。怎么写都会实现这个功能。

下面我就说一下我的处理方法:

公共单元中定义一个方法类型 TSimpleEvent=procedure (pUTObject:TObject) of object;

form1窗体增加一个过程 procedure AppendType(Sender:TObject);

form2中顶一个TSimpleEvent方法类型的变量AEvent;

在form1中点击增加按钮后的代码:

var
  VFrm2: TFrm2;
begin
  VFrm2:=TFrm2.Create(self);
  VFrm2.AEvent:=AppendType;
  VFrm2.ShowModal;
  VFrm2.Free;
end;
 

这样在form2中点击保存后,调用AEvent方法,也就是调用指定的form1的AppendType。

这样可以实现form2窗体中不用饱含任何一个窗体,这个窗体类是独立的。

程序的其它地方都可以调用form2,如果需要调用者保持同步,调用者给form2的AEvent赋值。 

form2中点击保存以后:

if Assigned(AEvent) then
      AEvent(VUTType);

form1的AppendType(Sender:TObject);

procedure TFrm1.AppendType(Sender: TObject);
begin
  CLDSType.Append;
  CLDSType.FieldByName('Num').AsString:=TUTType(Sender).Num;
  CLDSType.FieldByName('Name').AsString:=TUTType(Sender).Name;
  CLDSType.FieldByName('SetsValue').AsInteger:=TUTType(Sender).SetsValue;
  CLDSType.FieldByName('BeginDate').AsDateTime:=StrToDate(TUTType(Sender).BeginDate);
  CLDSType.FieldByName('EndDate').AsDateTime:=StrToDate(TUTType(Sender).EndDate);
  CLDSType.Post;
end;