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会以这种方式运行?
答案 0 :(得分:3)
您有一个工具按钮,用于指示布尔状态。这些按钮应使用tbsChecked
工具按钮样式。当按钮使用该样式时,单击该按钮可切换其Down
属性。
您使用的是tbsButton
按钮样式。这是用于标准按钮,不用于指示状态。如果您有tbsButton
,Down
事件期间和之后False
属性始终为OnClick
。
除了将样式设置为tbsChecked
之外,您还可以将Grouped
属性设置为True
(将AllowAllUp
保留为False
)。这将阻止您的按钮自动Down
状态切换。然后,您就可以按照自己使用的方式切换按钮的状态。