4

我有 2 个表格,我想分享一个TActionManager并分配TAction-s。

第一种形式是主要形式 - 它拥有TActionManagerTAction标题为“Action”。

Form1 的主菜单将此操作和菜单项标题属性设置为“操作 A”。Form2 包括 Form1 并且还将操作分配给 menuitem,并且标题设置为“操作 B”。

在设计期间,一切看起来都不错 - 菜单项在 Form1 和 Form2 中被命名为“Action A”和“Action B”,并且分配了相同的操作。它在运行时也可以正常工作(两种形式的 OnExecute 都得到了正确处理)。

但是 - 在运行时,Form1 菜单项具有标题“Action A”,而 Form2 具有菜单项标题“Action”,就像操作标题一样。

我是否错误地包含了它们,是否可以在 Form2 上包含 Form1 以共享操作和更改标题?它是 D2010 / CB2010 中的错误吗?

例子:

  1. 创建 Form1 和 Form2 并将主菜单添加到两者
  2. 将 TActionManager 拖放到 Form1 并在其中创建 Action1。
  3. 在 Form1 Action1 中分配菜单项,然后修改 Caption(标题现在显示为粗体,表示从默认值更改)
  4. 在 Form2 中分配菜单项以及 Action1(来自 Form1 TActionManager)并更改默认标题。
  5. 现在在运行期间,Form1 已更改标题(不同于 Action1.Caption),并且 Form2 具有与 Action1.Caption 相同的标题,尽管标题应该是在步骤 4 中更改的新值。
4

2 回答 2

5

我复制了您的问题,确实,这是一种奇怪的行为。除了为什么要更改菜单项标题的明显问题之外,以下应该有效:

将两个菜单项的Action属性设置为相同的操作。现在菜单项的标题链接到动作的标题并注意它们不再存储(它们在对象检查器中显示为非粗体)。随后,将菜单项的标题更改为独立值,并注意它们现在已存储,并且菜单项在设计时确实会相应更改。

但在运行时,第二个菜单项的标题确实再次跟随动作的标题。在我看来,这不应该发生。

我没有重现的是无法在运行时更改它。以下按预期工作(此处为 D7):

procedure TForm2.FormCreate(Sender: TObject);
begin
  mnuAction1.Caption := 'Action B';
end;

确定要更改菜单项的标题而不是操作的标题?

于 2012-05-01T21:11:45.107 回答
2

当操作链接到菜单项或更改操作标题时,TAction.Caption 将覆盖 TMenuItem.Caption。如果您在表单 Loaded 方法中更改菜单项标题,您应该能够为两个表单设置不同的标题。

于 2012-05-01T20:07:58.317 回答