在应用软件中,,有大量的基本信息设置窗体,如:部门设置,人员设置等。
问题:
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;