首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDI应用程序中的TActionManager。失败的行为

MDI应用程序中的TActionManager。失败的行为
EN

Stack Overflow用户
提问于 2012-06-06 01:32:07
回答 1查看 804关注 0票数 1

我有一个MDI应用程序,我正在使用TActionManager来管理应用程序中的操作,这也意味着它包含了我的MDIChild表单的操作。

这里有一个简单的例子来重现我的问题:

创建具有2个表单的新VCL表单应用程序。Form1 & Form2在Form1上丢弃了一个TButton和一个TActionManager。使用TActionManager的PopUp编辑器创建2个TActions。为Form1设置FormStyle := fsMDIForm。为Form2设置FormStyle := fsMDIChild。

将此代码添加到相应的事件中:

代码语言:javascript
复制
// Form1   
procedure TForm1.Action1Execute(Sender: TObject);
begin
   ShowMessage('Action1');
end;
procedure TForm1.Action2Execute(Sender: TObject);
begin
   ShowMessage('Action2');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
   oForm2: TForm2;
begin
   oForm2 := TForm2.Create(Application);
end;

// Form 2
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

在Form2上丢弃TActionToolBar。使用TActionManager PopUp编辑器将Action1和Action2放在此TActionToolBar上。保存并运行。单击Form1上的按钮以显示Form2。一切都按预期运行。现在关闭Form2并重新打开它。缺少操作...

知道我真的需要使用TActionManager,有没有办法避免丢失我的操作?

EN

回答 1

Stack Overflow用户

发布于 2012-06-06 02:31:19

我将尽我所能地解释这个问题。

首先,你的行动是断开的,而不是“消失”,它们仍然存在。换句话说,ActionManager1.ActionCount仍将返回2。

也就是说,您在设计时所做的是将一个表单变量上的操作列表与另一个表单变量上的工具栏连接起来。换句话说。Form1.ActionList正在附加到Form2.ToolBar。这就是为什么它会在您第一次运行时工作,下一次创建TForm2实例时,它不再是默认创建的Form2,因此不会连接到变量Form1。这是我多年来最好的猜测,我在DataModules上也遇到过类似的问题。

我的答案是,将操作列表放在子窗体上。如果需要在所有子窗体之间共享操作,则操作列表和工具栏属于MDI父窗体。这对于MDI应用程序来说是相当标准的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10902040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档