我不确定为什么 TSpeedButton 具有此属性,但是当 TSpeedButton 是给定 groupindex 的唯一按钮时,无论是否按下“AllowAllUp”,它都不会保持按下状态。也许绝地控制就足够了,但希望有一些解决办法。任何帮助或轶事表示赞赏。
顺便说一句,我(仍在)使用 Delphi 7,不确定这是否是一个全面的难题。
我这里没有 D7,但在 D2006 中,如果 GroupIndex 的值 > 0,则 Speedbutton 保持关闭。
如果这不是您希望的行为,您可以在 OnClick-Eventhandler 中手动设置 Down-Property(确保 GroupIndex 为 0)。
我刚刚在 Delphi 7 (Build 4.453) 中尝试过:
TSpeedButton
到表单AllowAllUp := true;
GroupIndex := 1;
单击按钮时,它会切换其向下状态,而无需任何其他代码。
Knight_killer 是正确的。我可以告诉你它可以在任何版本的 delphi 中工作:
object SpeedButton1: TSpeedButton
Left = 152
Top = 384
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 99
end
Delphi 为您完成工作,因此“不要编写任何代码”。
在 IDE 中选择您要作为一个组操作的所有 SpeedButton,然后将整个组的“GroupIndex”设置为“0”以外的其他值,您就完成了 - 没有代码 - NADA!
嗯,很奇怪,我记得用这个成功了好几次。也许您应该尝试使用 SpeedButton 的Down
属性?我不认为当你点击它时它会自动切换——你应该明确地切换Down
,我猜......
[编辑:替换Checked
为Down
--- TSpeedButton 没有Checked
属性,抱歉!]
要使其正常工作,您不能只切换 Down 属性,因为它在 OnClick 事件中始终处于关闭状态。你需要有另一个值:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
MyBoolProperty := not MyBoolProperty;
SpeedButton1.Down := MyBoolProperty;
end;
我正在为我的问题寻找解决方案,我认为这有点像。我想让 SpeedButton 像开关一样切换上下状态,我通过设置属性来管理它:
AllowAllUp := True;
GroupIndex := 1;
然后在OnClick
按钮的情况下我写道:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if( SpeedButton1.AllowAllUp ) then
begin
SpeedButton1.AllowAllUp := False;
SpeedButton1.Down := True;
end else
begin
SpeedButton1.AllowAllUp := True;
SpeedButton1.Down := False;
end;
end;
这会在单击按钮时向下切换按钮,并在再次单击按钮时向上切换。
希望它会有所帮助
诀窍是将 GroupIndex 设置为唯一值并将 AllowAllUp 设置为 true。如果你忘记了第一个,它就不会停下来,如果你忘记了第二个,它就不会再上升,一旦它下降了。
将 AllowAllup 设置为 true,将 Down 设置为 false。
然后在OnClick
事件中:
....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down := not btn.Down;
....
将 AllowAllUp 设置为 True。
将 GroupIndex 设置为非 0。
要将其全部保留在 OnClick 中,请尝试
with Speedbutton1 do
begin
if tag = 1 then tag := 0 else tag := 1;
down := (tag = 1);
end;
GroupIndex
对按钮进行分组。该组中只有一个按钮可能处于活动状态。它们都需要具有高于 的相同索引0
。
AllowAllUp
当连续点击 2 次时,允许上下切换按钮。