2016-11-11 14 views
-2

我使用啓用/禁用控件來指示窗體處於繁忙或空閒狀態。 我需要啓用只有一個控制(一個按鈕,但可能是其他),當它被禁止放棄一些過程。我將按鈕標題更改爲「ABORT」。查找控件標題並將其更改爲狀態

我點擊按鈕A,我將按鈕A的標題更改爲'ABORT'。所有其他控件將被禁用,但我想要一個帶有標題'ABORT'的按鈕仍然被啓用。

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; 

用例:

procedure F1.LB1Click(sender: TObject); 
begin 
    FormBusy(sender); 
    try 
    // do something 
    finally 
    FormIdle(sender); 
    end; 
end; 
+0

@TomBrunberg有時我使用'TComboBox'點擊。 – Bianca

+1

爲什麼不直接使用控制參考 –

+0

@DavidHeffernan是不是像@Owen給出了答案?是的,這對我來說是新的。它運作良好。但是有沒有更簡單的方法,就像'formbusy'和'formdile'? – Bianca

回答

5

而不是試圖找到其Caption屬性按鈕,爲什麼不直接從數組訪問它?

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

每個TControl將被禁用,除了Button1將被啓用。

+0

我通過'FormBusy(發送者)'和'FormIdle(發送者)'來管理我的表單忙/閒。所以現在,我需要將該代碼放在每個按鈕上,對嗎? – Bianca

+0

該代碼將進入FormBusy()方法內部,因此當您將表單置於「繁忙」狀態時,除「ABORT」以外的其他控件都被禁用。您需要將額外的代碼添加到FormIdle()方法,以便在回到「空閒」狀態時重新啓用適當的控件。 – Owen

+0

這很好,歐文。謝謝。但我有很多按鈕。如何將代碼放在FormBusy()中? – Bianca

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; 
0

你說:

我按一下按鈕A,i按鈕A的標題更改爲 '中止'。所有 其他控件將被禁用,但我想要一個帶有標題 的按鈕'ABORT'仍處於啓用狀態。

從你使用的例子,你通過該按鈕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()功能,您只需啓用所有控制。

相關問題