我有两个单选按钮rdoA& RDOB。我的要求是每当用户点击rdoA时,我必须检查某些参数,如果不满足,则将选择恢复为rdoB。我有这样的代码
MyForm.rdoAClick
var
Save: TNotifyEvent;
begin
if //some condition then
begin
Save := rdoB.OnClick;
rdoB.OnClick := nil;
rdoB.Checked := true;
rdoB.OnClick := Save;
Exit;
End;
//Other stuff
End;
问题是这个代码有效但在某些情况下说当rdoB已被选中并且如果我们将其更改为rdoA并且如果条件满足rdoB被选中返回并且如果我切换窗口的焦点并返回到表单再次触发rdoAClick事件。
我在这里做错了什么?有没有更好的方法来解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:1)
我曾经遇到类似的问题,并找到了解决方案(适应您的代码)
procedure TForm6.rdoAClick(Sender: TObject);
var
save: TNotifyEvent;
begin
if MessageDlg('Allow change?',mtConfirmation, [mbYes,mbNo],0) = mrNo then
begin
save := rdoB.OnClick;
rdoB.OnClick := nil;
rdoB.SetFocus;
// rdoB.Checked := True;
rdoB.OnClick := save;
end;
end;
设置Focus而不是Checked(由于设置Focus而无论如何都会设置)确保RadioButton处于正确的内部状态。