Delphi 查找控件标题并更改其状态

Delphi 查找控件标题并更改其状态,delphi,controls,disabled-control,Delphi,Controls,Disabled Control,我有启用/禁用控件的窗体,以指示窗体处于忙碌或空闲状态。 我只需要启用一个控件(一个按钮,但也可以是其他控件),当它被禁用以中止某个进程时。我将按钮标题更改为“中止” 单击按钮A,我将按钮A的标题更改为“中止”。所有其他控件都将被禁用,但我希望标题为“中止”的按钮仍处于启用状态 procedure F1.FormBusy (sender); var a: Integer; begin for a := 0 to TabSheet1.ControlCount - 1 do begin

我有启用/禁用控件的窗体,以指示窗体处于忙碌或空闲状态。 我只需要启用一个控件(一个按钮,但也可以是其他控件),当它被禁用以中止某个进程时。我将按钮标题更改为“中止”

单击按钮A,我将按钮A的标题更改为“中止”。所有其他控件都将被禁用,但我希望标题为“中止”的按钮仍处于启用状态

procedure F1.FormBusy (sender);
var
  a: Integer;
begin
  for a := 0 to TabSheet1.ControlCount - 1 do
  begin
    TabSheet1.Controls[a].Enabled := False;
    (* if TabSheet1.Controls[a] caption := 'ABORT' then
      TabSheet1.Controls[a].Enabled := True
      < how to do this ? *)
  end;
end;

与其尝试通过其标题属性查找按钮,为什么不直接从数组访问它呢

for a := 0 to TabSheet1.ControlCount - 1 do
begin
  TabSheet1.Controls[a].Enabled := TabSheet1.Controls[a] = Button1;
end;

每个t控件都将被禁用,按钮1除外,按钮1将被启用。

您可以定义另一种方法来分配忙参数:

procedure F1.MAJIHM(const isBusy : Boolean);
var a: Integer;
begin
  for a := 0 to TabSheet1.ControlCount - 1 do
  begin
    TabSheet1.Controls[a].Enabled := isBusy;
  end;
  btnABORT.enabled := not isBusy;
end;

procedure F1.FormBusy (sender);
begin
  MAJIHM(True);
end;

procedure F1.FormIdle (sender);
begin
  MAJIHM(False);
end;
你说:

单击按钮A,我将按钮A的标题更改为“中止”。全部的 其他控件将被禁用,但我需要一个带有标题的按钮 “中止”仍处于启用状态

procedure F1.FormBusy (sender);
var
  a: Integer;
begin
  for a := 0 to TabSheet1.ControlCount - 1 do
  begin
    TabSheet1.Controls[a].Enabled := False;
    (* if TabSheet1.Controls[a] caption := 'ABORT' then
      TabSheet1.Controls[a].Enabled := True
      < how to do this ? *)
  end;
end;
从您的使用示例中可以清楚地看到,您将该按钮传递到
F1.FormBusy()
,您可以将其称为
sender
参数:

procedure F1.FormBusy(sender: TObject);
var
  a: Integer;
begin
  for a := 0 to TabSheet1.ControlCount - 1 do
    TabSheet1.Controls[a].Enabled := TabSheet1.Controls[a] = sender;
end;

FormIdle()
函数中,您只需启用所有控件。

我通过
FormBusy(发送方)
FormIdle(发送方)
管理我的表单忙/闲。现在,我需要将代码放在每个按钮上,对吗?这些代码将进入FormBusy()方法中,因此当您将表单置于“忙碌”状态时,除了“中止”之外的控件将被禁用。您需要向FormIdle()方法添加额外的代码,以便在返回到“空闲”状态时重新启用相应的控件。谢谢但是我有很多按钮。如何在FormBusy()中放置代码?@TomBrunberg有时我使用
TComboBox
单击。为什么不直接使用控件引用directly@DavidHeffernan这像是给了欧文一个答案吗?是的,这对我来说是新的。它工作得很好。但是有没有更简单的方法,就像
formbusy
formdile
那样?是的。用行动来做这件事我会对任何被否决的问题进行投票,并且没有提供否决的理由!!!!