假设我有三个开关,即SW_A,SW_B和SW_ALL。
单击SW_A(从关闭到打开)时,TMemo打印' SW_A打开',同样适用于SW_B。
然而,当单击SW_ALL(从关闭到打开)时,TMemo打印' SW_ALL打开,并且SW_A和SW_B都应该打开,无论它们当前的状态是什么,而不打印&#39 ; 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 :(得分:2)
仅在“单击SW_ALL(从关闭到打开)”或“单击SW_ALL时出现问题”时是否存在问题尚不清楚。 以下是“每当单击SW_ALL时”的解决方案。
开关组件可能具有OnSwitch事件。当您切换SW_ALL并以编程方式更改其他开关的状态时,SW_A和SW_B的OnSwitch事件就会像单击时一样触发。
要暂时阻止SW_A和SW_B对切换事件作出反应,您可以将nil分配给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;