Polimorfismo

30/04/2005 - 07:16 por Jorge Eastman | Informe spam
Hola grupos...

Necesito lo siguiente:

Tengo en una forma una serie de controles del mismo tipo, necesito tener un
controlador de eventos único para todos estos controles, tomando en cuenta
que algunos controles pueden ser agregados en tiempo de ejecución.

Me explico, tengo varios TextBox en la forma, el usuario hace una selección
por medio de unos CheckBox, para evitar utilizar muchos IFs y reescritura de
código y tomando en cuenta que algunos controles se agregan en tiempo de
ejecución, como puedo hacer para manejar los eventos de estos controles
desde un solo punto, como se hace en VB que se crea una clase, luego se
declara una variable del tipo de la clase, posteriormente se asigna el
control a la variable para así poder tener todos los eventos en un solo
sitio.

No se si logré explicarme adecuadamente.

Gracias a todos por su ayuda.

Un saludo.

Jorge Eastman
 

Leer las respuestas

#1 Victor B.
30/04/2005 - 11:32 | Informe spam
A ver si esto te puede ayudar. En ocasiones he necesitado hacer algo
parecido y lo que se me ocurrió es:
En un PRG escribo la definición de una clase del tipo que necesito, y
programa el evento click de forma que llamo a un método propio en el
formulario, algo así:
**Definición de la clase
DEFINE CLASS miCmd AS CommandButton
PROCEDURE Click
This.Parent.cmdClick(THIS) &&Llamo al método cmdClick del
formulario y le paso como parámetro el control
ENDPROC
ENDDEFINE

En el formulario uso AddObject para, en tiempo de ejecución, añadir los
controles necesarios. Uso alguna propiedad para distinguir el control. Para
ello puedes crearte un método llamado CreaControl:
LOCAL nH, nID, sOBN, oCMD

m.nID=0
FOR nH=1 TO THISFORM.ControlCount
IF THISFORM.Controls(nH).Class = "miCmd" THEN
m.niD=m.nID+1
ENDIF
NEXT
m.nID=m.nID+1
m.sOBN="miCM"+ALLTRIM(STR(m.nID))
THISFORM.AddObject(m.sOBN, "miCmd")
m.oCMD=THISFORM.ControlCount
m.oCMD.Tag=m.nID
m.oCMD.Visible=.T.
. Establecer otras propiedades

En el formualrio agrego el método cmdClick:
LPARAMETERS oCMD
DO CASE
CASE VAL(oCMD.Tag) = 1
. Código
CASE VAL(oCMD.Tag) = 2
. Código
ENDCASE


Espero te sirva de algo...
Saludos


Víctor B.
Desarrollador independiente

"Jorge Eastman" escribió en el mensaje
news:ea%
Hola grupos...

Necesito lo siguiente:

Tengo en una forma una serie de controles del mismo tipo, necesito tener
un controlador de eventos único para todos estos controles, tomando en
cuenta que algunos controles pueden ser agregados en tiempo de ejecución.

Me explico, tengo varios TextBox en la forma, el usuario hace una
selección por medio de unos CheckBox, para evitar utilizar muchos IFs y
reescritura de código y tomando en cuenta que algunos controles se agregan
en tiempo de ejecución, como puedo hacer para manejar los eventos de estos
controles desde un solo punto, como se hace en VB que se crea una clase,
luego se declara una variable del tipo de la clase, posteriormente se
asigna el control a la variable para así poder tener todos los eventos en
un solo sitio.

No se si logré explicarme adecuadamente.

Gracias a todos por su ayuda.

Un saludo.

Jorge Eastman



Preguntas similares