2015-02-17 7 views
0

У меня есть две радиокнопки rdoA & rdoB. Мое требование - каждый раз, когда пользователь щелкает rdoA, я должен проверять определенные параметры, и если они не удовлетворяются, верните выделение в rdoB. У меня есть код, как этотВыбор другой радиокнопки внутри события OnClick

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 запускается снова.

Что я здесь делаю неправильно? Есть ли лучший способ решить эту проблему? Любая помощь будет оценена.

+1

Можно ли проверить состояние в другом месте (когда произойдет какое-то событие) и отключить переключатель? – MBo

+0

Да, почему вы разрешаете пользователю нажимать? –

+0

* «Если я переключу фокус окна и вернусь к форме, событие rdoAClick будет запущено снова». * Может быть связано с этим: [Скрытые опасности TradioButton.TabStop] (http://blogs.teamb.com)/craigstuntz/2009/02/02/37987 /) и это: [RadioGroup.TabStop не контролирует, получают ли радиокнопки фокус] (http://qc.embarcadero.com/wc/qcmain.aspx?d=1860) , Это просто причуда в том, как RadioGroups обрабатывают фокус ввода. –

ответ

0

я был когда-то борется с аналогичной проблемой и нашел решение быть (адаптировано к коду)

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; 

Настройка фокуса вместо Проверил (который становится установлен в любом случае в результате установки фокуса) обеспечивает RadioButton находится в правильном внутреннем состоянии.

Смежные вопросы