检查时的TToolButton行为

时间:2013-06-10 09:56:34

标签: delphi delphi-xe2

TToolButton上有一个TJvToolBar,它与一个打开串口的操作相关联。我在我的操作OnExecute()事件中有这段代码:

procedure TfrmMainForm.acInstrumentConnectedExecute(Sender: TObject);
begin
  if acInstrumentConnected.Checked then
    if MessageDlg('Are you sure you wish to disconnect?', mtWarning, [mbYes, mbNo], 0,
      mbNo) <> mrYes then
      exit;
  acInstrumentConnected.Checked := not acInstrumentConnected.Checked;
  // actual code to connect/disconnect follows...
end;

如您所见,如果用户希望断开与端口的连接,我会在消息框后面更改操作Checked,但ToolButton的Down属性会在进入此事件之前发生更改。即使用户选择来响应提示,也会导致Up按钮。为什么ToolButton会以这种方式运行?

1 个答案:

答案 0 :(得分:3)

您有一个工具按钮,用于指示布尔状态。这些按钮应使用tbsChecked工具按钮样式。当按钮使用该样式时,单击该按钮可切换其Down属性。

您使用的是tbsButton按钮样式。这是用于标准按钮,不用于指示状态。如果您有tbsButtonDown事件期间和之后False属性始终为OnClick

除了将样式设置为tbsChecked之外,您还可以将Grouped属性设置为True(将AllowAllUp保留为False)。这将阻止您的按钮自动Down状态切换。然后,您就可以按照自己使用的方式切换按钮的状态。