2012-05-01 46 views
4

我有2種形式,我想共享一個單一TActionManager和分配TAction -s其中。重命名爲TAction另一種形式

第一種形式是主要形式 - 它包含TActionManagerTAction帶有標題「動作」。 Form1的

主菜單有這個動作和菜單項的標題屬性設置爲「行動A」。 Form2包含Form1,並將操作分配給menuitem,並將標題設置爲「操作B」。

在設計時一切看起來都很好 - 菜單項目被命名爲「動作A」和「行動B」在Form 1和Form和相同的動作被分配。它在運行時也可以正常工作(OnExecute爲兩種表單都正確處理)。

但是 - 在運行時,Form1的菜單項都有標題「行動A」 1和Form 2具有菜單項標題「行動」一樣的動作說明。

我是不是包括他們正確,是否有可能包括Form1中Form2上分享行動和改變標題嗎?這是D2010/CB2010中的錯誤嗎?

例子:

  1. 創建Form 1和Form,並添加主菜單既
  2. 降TActionManager到Form1並在其中創建措施1。
  3. 在Form1 Action1中指定菜單項,然後修改Caption(標題顯示爲粗體,表示從默認值更改爲粗體)
  4. 在Form2中也分配菜單項也是Action1(來自Form1 TActionManager)並更改默認標題。
  5. 在運行時期間現在Form1中已經改變字幕(從Action1.Caption不同),和窗體2具有相同的標題,以Action1.Caption儘管如在步驟4中
+1

在德爾福2009年這似乎工作正常。如果您更改了'TAction.Caption',則兩個測試表單上的菜單項標題都已更改。 – TLama

+1

@TLama只有當菜單項的標題在之前(以及在設置Action屬性的過程中)之前沒有改變時。 – NGLN

+0

@NGLN,忘了提及。謝謝! – TLama

回答

5

我轉載了你的問題,事實上,這是奇怪的行爲。除了明顯的問題,爲什麼要改變菜單項標題,下面應該工作:

同時設置菜單項的Action屬性設置爲相同的動作。現在,菜單項的標題與操作的標題相關聯,並且注意它們不再存儲(它們在對象檢查器中不顯示爲粗體)。隨後,將菜單項中的標題更改爲獨立值,並注意它們現在已存儲,並且菜單項在設計時確實會相應更改。

但在運行時,第二個菜單項的標題確實遵循的行動一次。這不應該發生在我看來。

我沒有再現的是不能在運行時改變它。以下按預期工作(此處爲D7):

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

確定您正在更改菜單項的標題而不是操作的標題?

+0

與2007年相同的行爲也。 –

+0

是的,這也適用於我...在將新名稱添加到構造函數中(使用C++)和FormCreate之後,它使用適當的標題。 – Coder12345

2

的TAction.Caption改變字幕應新值當操作鏈接到菜單項或操作標題更改時覆蓋TMenuItem.Caption。如果您在表單加載方法中更改菜單項標題,則應該可以爲這兩種表單使用不同的標題。

+1

我不同意。設置Action屬性後更改的菜單項標題應保持更改。 – NGLN

+0

而他們爲Form1,但不是Form2。它們也以粗體顯示在IDE中,就像您在下面回答中所說的那樣,表示該值已從默認值更改(默認情況下爲Action1.Caption)。所以這可能是Delphi/C++ Builder中的一個錯誤。在XE/XE2中沒有測試過這個,但這仍然是這種情況。 – Coder12345