【发布时间】:2018-03-19 09:44:54
【问题描述】:
我有一个 Delphi MDI 应用程序,它有一个只能打开一次的客户搜索子表单(检查 isAssigned),但是可以多次打开查看/编辑表单,以便最终用户可以一次打开多个客户(选项卡),我想做的是能够阻止他们多次打开同一个客户记录,在打开客户表格时,我将标题设置为客户帐户参考,如果该表格存在,我想到 .BringToFront,如果没有,我会创建它。
什么是实现这一目标的最佳方法,因为我正在摸不着头脑!
提前致谢。
procedure TfrmCustomerSearch.ViewCustomerExecute(Sender: TObject);
begin
screen.cursor := crappstart;
if not IsMDIChildOpen(frmMainMenu, 'frmCustomerView', pfrmCaption) then
frmCustomerView := TfrmCustomerView.createform(nil,dmCustomerSearchfrm.FDQCustSearchreference.Value,cxGrid1DBTableView1.DataController.FocusedRecordIndex)
else
frmCustomerView.BringToFront;
screen.cursor := crdefault;
end;
function TfrmCustomerSearch.IsMDIChildOpen(const AFormName: TForm; const AMDIChildName, AMDICaption : string): Boolean;
var
i: Integer;
begin
Result := False;
for i := Pred(AFormName.MDIChildCount) DownTo 0 do
if (AFormName.MDIChildren[i].name = AMDIChildName) then
begin
if (AFormName.MDIChildren[i].caption = AMDICaption) then
begin
Result := True;
Break;
end
end;
end;
【问题讨论】:
-
您必须提供暴露问题的最少代码,否则我们无法帮助您。
-
添加了我目前使用的东西,它可能是一些愚蠢的东西,但我看不到
-
使用 FormName 是个坏主意,不知道它可能是什么,而是使用类名。
-
另外,当您需要中断来退出循环时,您的循环错误。为此使用
while do或repeat until。不过,这与您的问题无关 -
MDIChildCount 在你的循环中应该是 MDIChildCount - 1。