CheckBox、ToggleSwitch 程式碼修改 自動觸發 onclick的問題,把onclick的邏輯 寫在onmouseup裡 解決問題

del88發表於2024-11-02

半夜2點失眠,繼續寫部落格。。。。。

例子如下:

procedure TForm4.btn1Click(Sender: TObject);
begin
  CheckBox1.Checked := True;
  ToggleSwitch1.State := tssOn;
end;

procedure TForm4.btn2Click(Sender: TObject);
begin
  CheckBox1.Checked := false;
  ToggleSwitch1.State := tssOff;
end;

procedure TForm4.CheckBox1Click(Sender: TObject);
begin
  ShowMessage('check box on click');
end;

procedure TForm4.ToggleSwitch1Click(Sender: TObject);
begin
  ShowMessage('ToggleSwitch box on click');
end;

image

可以看到透過程式碼,讓其選中 或 取消選中 都會觸發它的 onclick事件,這樣很不好,容易導致 迴圈,我們只是想簡單的 透過程式碼讓其選中,而不是 出發它的 onclicck,可以把onclick的程式碼 放到其 onmouseup上去,這樣就簡單的 解決了這個問題;

procedure TForm4.CheckBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // on click 的邏輯 放到 onmouseup裡,不影響 onclick的效果,達到程式碼裡可以直接設定的目的
  ShowMessage('check box on click');
end;

procedure TForm4.ToggleSwitch1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // on click 的邏輯 放到 onmouseup裡
  ShowMessage('ToggleSwitch box on click');
end;

這樣就解決了這個問題;

image

相關文章