4

TActionManager1つのシングルと割り当てられTActionた-sを共有したい2つのフォームがあります。

最初のフォームはメインフォームです-それはTActionManagerTActionキャプション「アクション」で保持されます。

Form1のメインメニューでは、このアクションとmenuitemのcaptionプロパティが「アクションA」に設定されています。Form2にはForm1が含まれ、メニュー項目にアクションを割り当て、キャプションは「アクションB」に設定されます。

設計時はすべてが良好に見えます。メニュー項目には、Form1とForm2で「アクションA」と「アクションB」という名前が付けられ、同じアクションが割り当てられます。実行時にも正常に動作します(OnExecuteは両方のフォームで適切に処理されます)。

ただし、実行時に、Form1メニュー項目には「アクションA」というキャプションがあり、Form2にはアクションキャプションと同じように「アクション」というメニュー項目キャプションがあります。

それらを誤って含めていますか?アクションを共有し、キャプションを変更するために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で変更された新しい値である必要があります。
4

2 に答える 2

5

私はあなたの問題を再現しました、そして確かに、これは奇妙な振る舞いです。メニュー項目のキャプションを変更する理由の明らかな質問に加えて、以下が機能するはずです。

両方のメニュー項目のActionプロパティを同じアクションに設定します。これで、メニュー項目のキャプションがアクションのキャプションにリンクされ、保存されなくなったことに注意してください(オブジェクトインスペクターでは太字では表示されません)。続いて、キャプションをメニュー項目から独立した値に変更し、それらが現在保存されていること、およびメニュー項目が実際に設計時にそれに応じて変更されることに注意してください。

ただし、実行時には、2番目のメニュー項目のキャプションは実際にアクションのキャプションの後に続きます。これは私の意見では起こらないはずです。

私が再現しなかったのは、実行時に変更できないことです。以下は期待どおりに機能します(ここでは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 に答える