2014-12-08 40 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;