Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con propiedad TRadioButton.Checked en Runtime (https://www.clubdelphi.com/foros/showthread.php?t=57160)

vejerf 06-06-2008 16:20:40

Problema con propiedad TRadioButton.Checked en Runtime
 
Hola,
He creado un form con varios RadioButton. Este form posee varios constructores y según el constructor con el que se cree deben activarse unos u otros RadioButtons. El problema es que cuando hago en el constructor RadiButton.checked := true; me salta una excepción que me dice que no puede establecer el foco en un elemento que no es visible. ¿Alguna idea de como lo podría solucionar?
Gracias

enecumene 06-06-2008 16:44:47

Hola, puede ser por varias razones, al llamar o crear el form puede que le estes dando foco a algo que no existe o no está visible ó le estas dando foco a un compenente que no acepta el foco, revisa la llamada al form.

Saludos.

luisgutierrezb 06-06-2008 16:51:09

me imagino que creas el radiobutton al crear la forma por lo tanto te va a mandar ese error, porque no revisas primero que la forma este visible y si esta, actualizas el checked

roman 06-06-2008 16:52:47

No sé bien a qué se deba el problema (hice una prueba rápida y funcionó bien), quizá tienes algún evento asociado al evento OnClick de los RadioButtons que provoca el cambio de foco de algún control -cosa que no se puede hacer hasta que el formulario no esté visible.

Por otro lado, en mi opinión, el constructor debe reservarse para creación de controles y no para ajustes visuales, como lo es el marcar un radio button como seleccionado. Viene mejor el evento OnShow del formulario, o bien, redefinir el método DoShow.

Tampoco veo muy conveniente usar distintos constructores. Me parece más prolijo usar el constructor de siempre y pasarle información vía propiedades. Algo como:

Código Delphi [-]
Form := TMiForm.Create;
Form.Tipo := tipo_de_formulario;
Form.Show;

Entonces, en la redefinición de DoShow actúas en consecuencia:

Código Delphi [-]
procedure TMiForm.DoShow
begin
  case Tipo of
    0: AjustarControles;
    1: AjustarOtrosControles;
    
    etc
  end;
end;

// Saludos

vejerf 06-06-2008 17:09:44

Gracias por vuestras respuestas,
Roman ha dado con el problema y con la solucion (como siempre :D)... Yo usaba el evento onClick de los RadioButton y establecía el foco en otro componente (supongo que de ahí el error)... Ahora en vez de hacer el checked en el constructor lo hago en el evento onShow del form y funciona bien y revisaré bien como pasar parámetros sin usar constructores porque si Roman lo dice seguro que es bueno hacerlo así.

Muchas gracias a todos!!!


La franja horaria es GMT +2. Ahora son las 19:18:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi