2014-12-08 38 views
-2

假設我有三個開關,分別是SW_A,SW_B和SW_ALL。依賴於開關的打印

當SW_A被點擊(從關閉到打開),TMemo打印'SW_A打開',並​​且SW_B也一樣。但是,當單擊SW_ALL(從關閉到打開)時,TMemo會打印'SW_ALL打開',並​​且SW_A和SW_B都應當打開,無論打印的當前狀態如何,'SW_A打開'和'打開' SW_B開啓。'

我的問題是,無論何時單擊SW_All,其他交換機也會打印出它們的狀態。有誰知道如何解決這個問題?謝謝!!

procedure TForm1.SW_ALLSwitch(Sender: TObject); 
begin 
    if SW_All.IsChecked then 
    begin 
    Memo1.Lines.Add('SW_All is on'); 

    SW_Alarm_A.IsChecked := True; 
    SW_Alarm_B.IsChecked := True; 

    end 
    else 
    begin 
    Memo1.Lines.Add('SW_All is off'); 

    SW_Alarm_A.IsChecked := False; 
    SW_Alarm_B.IsChecked := False; 

    end; 

end; 


procedure TForm1.SW_ASwitch(Sender: TObject); 
begin 
    if SW_A.IsChecked = False then 
    Memo1.Lines.Add('SW_A is off') 
    else 
    Memo1.Lines.Add('SW_A is on'); 
end; 
+0

你沒有說什麼是什麼樣的控制'SW_A',以及兩個處理程序所附帶的事件。請你明確這些要點。 – 2014-12-08 11:50:59

回答

2

目前還不清楚如果只有當「SW_ALL點擊(從截止到上)」的問題,或者是否有「每當SW_ALL點擊」的問題。 以下是「每當單擊SW_ALL時」的解決方案。

交換機組件大概有一個OnSwitch事件。當您切換SW_ALL並以編程方式更改其他開關的狀態時,SW_A和SW_B的OnSwitch事件將像點擊時一樣觸發。

要暫時防止SW_A和SW_B對交換事件做出反應,您可以將n分配給OnSwitch事件,請更改交換機狀態並重新分配OnSwitch事件。例如

procedure TForm1.SW_ALLSwitch(Sender: TObject); 
var 
    TempOnSwA, TempOnSwB: TNotifyEvent; 
begin 
    TempOnSwA := SW_Alarm_A.OnSwitch; 
    SW_Alarm_A.OnSwitch := nil; 
    TempOnSwB := SW_Alarm_B.OnSwitch; 
    SW_Alarm_B.OnSwitch := nil; 

    if SW_All.IsChecked then 
    begin 
    Memo1.Lines.Add('SW_All is on'); 

    SW_Alarm_A.IsChecked := True; 
    SW_Alarm_B.IsChecked := True; 

    end 
    else 
    begin 
    Memo1.Lines.Add('SW_All is off'); 

    SW_Alarm_A.IsChecked := False; 
    SW_Alarm_B.IsChecked := False; 

    end; 

    SW_Alarm_A.OnSwitch := TempOnSwA; 
    SW_Alarm_B.OnSwitch := TempOnSwB; 
end;