我不确定为什么 TSpeedButton 有这个属性,但当一个 TSpeedButton 是给定 groupindex 的唯一按钮时,它不会保持按下状态,无论 "AllowAllUp" 是否按下。也许 Jedi 控件可以解决问题,但希望能找到一些解决方法。非常感谢任何帮助或趣闻轶事。
顺便说一下,我仍在使用 Delphi 7,不确定这是否是普遍的难题。
我这里没有 D7,但在 D2006 中,如果 GroupIndex 的值大于 0,则 Speedbutton 会保持按下状态。
如果这不是您想要的行为,您可以在 OnClick-Eventhandler 中手动设置 Down 属性(确保 GroupIndex 是 0)。
我刚试了一下Delphi 7(版本4.453):
TSpeedButton
AllowAllUp := true;
GroupIndex := 1;
单击按钮时,它会切换到其下降状态,不需要任何其他代码。
Delphi可以为您完成所有工作,因此“无需编写任何代码”。
在IDE中选择您想要作为组操作的所有SpeedButton,然后将整个组的“GroupIndex”设置为非“0”值,您就完成了 - 没有代码 - 什么都没有!!
knight_killer是正确的。我可以告诉你,在任何版本的Delphi中都可以使用:
object SpeedButton1: TSpeedButton
Left = 152
Top = 384
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 99
end
Down
属性?我不认为它在你单击它时会自动切换 - 你应该明确地切换Down
,我猜...
[编辑:用Down
替换了Checked
- TSpeedButton没有Checked
属性,抱歉!]
诀窍是将GroupIndex设置为唯一值,并将AllowAllUp设置为true。 如果您忘记了第一个,它将无法保持下降状态;如果您忘记了第二个,它将无法保持上升状态,一旦它已经下降。
GroupIndex
用于对按钮进行分组。每个组中只能有一个按钮处于激活状态。所有按钮的索引都必须大于0
。
AllowAllUp
允许在连续点击两次时切换按钮的按下和弹起状态。
....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down := not btn.Down;
....
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
MyBoolProperty := not MyBoolProperty;
SpeedButton1.Down := MyBoolProperty;
end;
将AllowAllUp设置为True。
将GroupIndex设置为非0值。
为了保持所有内容都在OnClick中,尝试使用
with Speedbutton1 do
begin
if tag = 1 then tag := 0 else tag := 1;
down := (tag = 1);
end;