Delphi 将TRadioButton设置为选中会导致OnClick事件
将TRadioButton设置为checked(按代码)会导致调用OnClick事件处理程序Delphi 将TRadioButton设置为选中会导致OnClick事件,delphi,Delphi,将TRadioButton设置为checked(按代码)会导致调用OnClick事件处理程序 如何识别用户是否正在通过GUI交互更改状态在以编程方式更改radiobutton状态时,可以禁用OnClick事件处理程序: mybox.Checked := true; mybox.Tag := 666; mybox.Checked :=true; mybox.Tag := 0; procedure myboxOnclick(Sender : TObject); begin if Tag
如何识别用户是否正在通过GUI交互更改状态在以编程方式更改radiobutton状态时,可以禁用OnClick事件处理程序:
mybox.Checked := true;
mybox.Tag := 666;
mybox.Checked :=true;
mybox.Tag := 0;
procedure myboxOnclick(Sender : TObject);
begin
if Tag = 0 then
//Do your thing
end;
如果某个操作已连接到radiobutton,则可以改为设置该操作的checked属性。这也将防止触发OnClick事件。
TRadioButton
(like)提供了一个受保护的属性单击禁用
,可以帮助您
我使用类帮助器添加所需的功能:
procedure TForm1.Button6Click(Sender: TObject);
var
Save: TNotifyEvent;
begin
Save:= RadioButton2.OnClick;
RadioButton2.OnClick:= nil;
RadioButton2.Checked:= not RadioButton2.Checked;
RadioButton2.OnClick:= Save;
end;
对于VCLTRadioButton
,使用以下类帮助程序:
RadioButton1.SetCheckedWithoutClick(False);
但是如果您使用的是动作,那么您可能使用的是动作的OnExecute事件,而不是控件的OnClick事件。当你更改动作的Checked属性时,OnExecute是否会被解雇?@Rob Kennedy:不,它不会-action.OnExecute和Button.OnClick在这里是同一事件。操作会暂时将radiobutton的受保护的“ClicksDisabled”属性设置为True,以防止在更改“Checked”属性时触发radiobutton的“OnClick”事件。理想情况下,您应该尝试一下。最后,如果
OnClick:=nil
和OnClick:=Save之间存在任何更复杂的逻辑代码>我赞成这种方法,但通常在表单类的私有部分使用标志,类似于“ChangingStuffRomCode:Boolean”。其思想是通常有多个单选按钮(以及其他类似的控件),在初始化表单时设置单个标志更简单。
TRadioButtonHelper = class helper for TRadioButton
procedure SetCheckedWithoutClick(AChecked: Boolean);
end;
procedure TRadioButtonHelper.SetCheckedWithoutClick(AChecked: Boolean);
begin
ClicksDisabled := True;
try
Checked := AChecked;
finally
ClicksDisabled := False;
end;
end;