Delphi XE 2操作列表-启用/禁用操作

Delphi XE 2操作列表-启用/禁用操作,delphi,delphi-xe2,vcl,Delphi,Delphi Xe2,Vcl,我创建了一个简单的应用程序,其中包含: -主要形式 -主菜单 -行动清单 操作列表由三个操作组成:一个标准-退出,两个特定-1。连接到数据库和2。账单 为了防止在连接到数据库之前进行计费操作,我为billing=false设置了属性“enabled” 连接操作事件(OnExecute)我链接到此过程: procedure TForm1.ConnectActionExecute(Sender: TObject); begin ConnectAction.Enabled := false;

我创建了一个简单的应用程序,其中包含: -主要形式 -主菜单 -行动清单

操作列表由三个操作组成:一个标准-退出,两个特定-1。连接到数据库和2。账单

为了防止在连接到数据库之前进行计费操作,我为billing=false设置了属性“enabled”

连接操作事件(OnExecute)我链接到此过程:

procedure TForm1.ConnectActionExecute(Sender: TObject);
begin
  ConnectAction.Enabled := false;
  BillingAction.Enabled := true;
  StatusBar1.Panels[0].Text := 'DB Status: Connected';
end;
但在启动此操作后,ConnectAction被禁用,但BillingAction继续保持禁用状态。
请指出我的错在哪里?

您是否有连接到BillingAction的OneExecute事件?在没有OneExecute事件的情况下禁用操作是标准行为


更新:您可以使用操作的
DisableIfNoHandler
属性来控制此操作。

我猜您可以在BillingAction.SetEnabled中设置断点,并可能捕捉到将其设置回False的时刻(如果使用属性setter而不是直接访问私有字段,这似乎是合理的),这很奇怪。从
OnUpdate
OnUpdate
控制
Enabled
的正常操作可能会导致100%的CPu使用率,如果不调整
TApplication
,则在使用TAction时,我总是使用OnUpdate事件设置Enabled属性,并且我从未意识到CPu消耗量的任何增加。@arich为什么OnUpdate处理程序会引发OnIdle。做对了,他们就不会做。我很遗憾,我错过了“与BillingAction关联的OneExecute活动”,你不是第一个。