将TAction重命名为另一种形式

时间:2012-05-01 20:00:38

标签: delphi delphi-2010 c++builder-2010 taction

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

第一个表单是主表单 - 它包含TActionManagerTAction标题为“Action”。

Form1的主菜单将此操作和menuitem标题属性设置为“操作A”。 Form2包括Form1,并且还将命令分配给menuitem,并将标题设置为“Action 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中更改的新值。

2 个答案:

答案 0 :(得分:5)

我转载了你的问题,事实上,这是一种奇怪的行为。除了显而易见的问题,为什么要更改菜单项标题,以下应该工作:

将菜单项的Action属性设置为相同的操作。现在,菜单项的标题与操作的标题相关联,并注意它们不再存储(它们在对象检查器中看起来不是粗体)。随后,将菜单项中的标题更改为独立值,并注意它们现在已存储,并且菜单项确实在设计时相应地更改。

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

我没有重现的是在运行时更改它的可能性。以下按预期工作(D7在这里):

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

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

答案 1 :(得分:2)

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