Delphi 查找控件标题并更改其状态
我有启用/禁用控件的窗体,以指示窗体处于忙碌或空闲状态。 我只需要启用一个控件(一个按钮,但也可以是其他控件),当它被禁用以中止某个进程时。我将按钮标题更改为“中止” 单击按钮A,我将按钮A的标题更改为“中止”。所有其他控件都将被禁用,但我希望标题为“中止”的按钮仍处于启用状态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
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
那样?是的。用行动来做这件事我会对任何被否决的问题进行投票,并且没有提供否决的理由!!!!