如何实现窗体名称作为程序前缀的通用化(200分)

  • 主题发起人 主题发起人 交通灯
  • 开始时间 开始时间

交通灯

Unregistered / Unconfirmed
GUEST, unregistred user!
我有程序如下,frmClientData和frmPersonData是两个窗体的名称。编译通过:
if assigned(frmClientData) then
begin
frmClientData.dxDBInspector1.Enabled=true;
end;
if assigned(frmPersonData) then
begin
frmPersonData.dxDBInspector1.Enabled=true

end;

问:如何定义一个变量aaa,或怎样做,才能够实现这样:
aaa:=frmClientData;
if assigned(aaa) then
begin
aaa.dxDBInspector1.Enabled:=true
end;

aaa:=frmPersonData;
if assigned(aaa) then
begin
aaa.dxDBInspector1.Enabled:=true
end;
就是程序前缀的变量通用化,那我的程序就可以写少一些重复的代码了。
 
frmClientData和frmPersonData是一个窗体的两个实例吗?
 
你试试这个
Var
aaa: Tobject;

aaa:=frmClientData;
if assigned(aaa) then
begin
(aaa as TfrmData).dxDBInspector1.Enabled:=true
end;
 
大家有什么办法,想法,help.
 
procedure TMainForm.sbarMainShortcutItemClick(Sender: TObject;
Shortcut: TShortcutItem);
var
Key: string;
procedure ReleaseActiveForm;
begin
if FActiveForm <> nil then
begin
FActiveForm.Free;
FActiveForm := nil;
end;
end;
procedure RefreshActiveTitle;
begin
if FActiveForm = nil then Exit;
lblActiveForm.Caption := FActiveForm.Caption;
if FActiveForm.Icon <> nil then
imgActiveForm.Picture.Icon := FActiveForm.Icon
else
imgActiveForm.Picture.Icon := Application.Icon;
end;
begin
Key := Shortcut.Shortcut;
if Key = '日常:执行码管理' then
begin
//if not gSysInitFinished then Exit;
if not (FActiveForm is TExecNumberForm) then
begin
Screen.Cursor := crHourglass;
ReleaseActiveForm;
FActiveForm := TExecNumberForm.Create(Self);
RefreshActiveTitle;
Screen.Cursor := crDefault;
end;
end
else if Key = '日常:与上级交换数据' then
begin
//if not gSysInitFinished then Exit;
if not (FActiveForm is TFinXTopForm) then
begin
Screen.Cursor := crHourglass;
ReleaseActiveForm;
FActiveForm := TFinXTopForm.Create(Self);
RefreshActiveTitle;
Screen.Cursor := crDefault;
end;
end
 
如果你的那两个窗体是从一个你的基类窗体继承下来的,而且基窗体中又有控件
dxDGInspector1
就可以这样写
var
aaa:TForm1;//TForm1就是两个窗体的基类,包含dxDBInspector1控件
begin
aaa:=frmClientData;
if assigned(aaa) then
begin
TForm1(aaa).dxDBInspector1.Enabled:=true;
end;
aaa:=frmPersonData;
if assigned(aaa) then
begin
TForm1(aaa).dxDBInspector1.Enabled:=true
end;
end;
 
全局 var aaa: TForm;

程序其它地方
aaa:=frmClientData;
or
aaa:=frmPersonData;

需要通用的地方
if assigned(aaa) then begin
if aaa is frmClientData then
(aaa as frmClientData).dxDBInspector1.Enabled:=true
else if aaa is frmPersonData then
(aaa as frmPersonData ).dxDBInspector1.Enabled:=true
end;
 
用继承inherited方法,frmClientData和frmPersonData都继承同一个basic form,
在BASICFORM写子窗体的通用代码。
 
多人接受答案了。
 
后退
顶部