【问题标题】:Renaming TAction for another form为另一个表单重命名 TAction
【发布时间】:2012-05-11 07:46:41
【问题描述】:

我有 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 中分配菜单项,然后修改标题(标题现在显示为粗体,表示更改默认值)
  4. 在 Form2 中分配菜单项以及 Action1(来自 Form1 TActionManager)并更改默认标题。
  5. 现在在运行期间,Form1 已更改标题(不同于 Action1.Caption),Form2 与 Action1.Caption 具有相同的标题,尽管标题应该是在步骤 4 中更改的新值。

【问题讨论】:

  • 在 Delphi 2009 中这似乎工作正常。如果您更改TAction.Caption,我的两个测试表单上的菜单项标题都已更改。
  • @TLama 仅当菜单项的标题未更改之前(当然设置 Action 属性之后)。
  • @NGLN,忘记提了。谢谢!
  • 我不想更改 TAction.Caption - 这会更改两个菜单上的标题。菜单需要有不同的标题。上面我加了几行代码解释一下。

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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 与 2007 年的行为也相同。
  • 是的,这对我也有用...在将新名称放入构造函数(在 C++ 中)和 FormCreate 之后,它使用了正确的标题。
【解决方案2】:

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

【讨论】:

  • 我不同意。设置 Action 属性后更改的菜单项标题应保持更改。
  • 它们适用于 Form1,但不适用于 Form2。它们还在 IDE 中以粗体文本显示,就像您在下面的回答中所说的那样,表明该值已从默认值更改(在本例中默认为 Action1.Caption)。所以这可能是 Delphi/C++Builder 中的一个错误。尚未在 XE/XE2 中对此进行测试,但情况仍然如此。
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 2015-12-06
  • 2011-10-02
相关资源
最近更新 更多