実際に、Iこれは良い質問だと思うし、downvoteに値するものではありません。
問題を再現できます。私はFMX形式で2つのボタンを置く。私は Button1のOnClickをButton1Click
に、Button2のAction
をLiveBindingsBindNavigateDelete1
に設定しました。
Button2をクリックすると、「レコードを削除しますか?」という標準がポップアップします。現在のレコード を削除します。
ただし、Button1をクリックすると、else
ブロックが実行されても、[レコードを削除しますか?]確認 はではありません。が表示されるため、レコードは削除される可能性がありません。
理由は、コード
function TCustomAction.Execute: Boolean;
begin
Result := False;
if Supported and not Suspended then
begin
Update;
if Enabled and AutoCheck then
if (not Checked) or (Checked and (GroupIndex = 0)) then
Checked := not Checked;
if Enabled then
Result := ((ActionList <> nil) and ActionList.ExecuteAction(Self)) or
((Application <> nil) and Application.ExecuteAction(Self)) or inherited Execute or
((Application <> nil) and Application.ActionExecuteTarget(Self));
end;
end;
にEnabled
プロパティは Update
への呼び出し時にFalseに設定されるように、デフォルトで思われているので、if Enabled then ...
が実行されません。私は Update
の呼び出し中にEnabled
をTrueに設定する方法を見つけることができませんでした。多分誰かがそれをやる方法を知っています。 Button2
の場合
、実行は、それが実行 レコード削除ルーチンをもたらすことでAction.ExecuteTarget(Self)
への呼び出しであるTComponent.ExecuteAction
と に渡します。 TComponent.ExecuteAction
がコンポーネントで Action
を関連付ける方法、つまり、実行されますように。
そうで、そこから、あなたの問題は、コードを調整する方法になるために私には見えました答えはかなり明白でした。すべてのことが必要なの
はその識別子を変更する、アクションを呼び出すしないアクションの `NAME`を変更するこの
procedure TForm1.Button1Click(Sender: TObject);
begin
if cdsOrdersSTATUS.Value='READY' then
begin
ShowMessage('Your Order Is Already READY/PENDING!');
end
else
begin
Button1.ExecuteAction(LiveBindingsBindNavigateDelete1); // <- this works
//LiveBindingsBindNavigateDelete1.Execute; //Not working,why?
end;
end;
です。 'TButton.Action'プロパティにActionを代入し、ボタンが自動的にそれを呼び出させるだけで何が問題になりますか?あなたは本当に何を達成しようとしていますか? –
cdsOrdersSTATUS.Value = 'READY'ならば begin ShowMessage( 'あなたの注文はすでに準備完了です!'); end else begin ActionList1.Actions [0] .Name:= 'LiveBindingsBindNavigateDelete1'; end; –
私はあなたが何を言おうとしているのか分かりません。 Actionの 'OnExecute'イベントを呼び出すだけなら、' Execute() 'メソッドを呼び出します。 –