Artículo original: Binding to the Valid event
http://www.foxpert.com/KnowlBits_200701_1.htm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York
Como otras muchas cosas en Visual FoxPro, enlazar con el evento Valid no es tan evidente como uno pudiera desear. Al enlazar a un control en un grid, Visual FoxPro llama al objeto delegado, solamente cuando el control grid contiene código definido por el usuario en el evento Valid, en algún punto de la jerarquía. Este código podría no hacer nada y puede ser solamente un comentario. Visual FoxPro necesita el código del usuario como un lugar de enlace, así que suficiente conque exista.
Si intenta enlazar un evento Valid de un textbox utilizando el objeto Text1 predeterminado o un textbox regular sin ningún código especial en el evento Valid, su código no será llamado nunca. Este comportamiento ya está documentado (bien, oculto, en la sección Remarks (Observaciones) de BindEvent: "Ciertos eventos como When y Valid necesitan que haya código en el evento para que pueda ocurrir el enlace."
El siguiente ejemplo demuestra este comportamiento. No importa cómo navegue en el grid o qué valores cambie, el único evento Valid que verá siempre es el de la columna 2:
*========================================================== * Enlazar al evento Valid de un control grid es posible * solamente si emplea una subclase del control con código en el evento Valid *========================================================== Public goForm Create Cursor Test (cField1 C(10), cField2 C(10)) Insert into Test Values ("one","two") Insert into Test Values ("three","four") Go top goForm = CreateObject("Form") goForm.AddObject("grd","MyGrid") goForm.grd.Visible = .T. goForm.Left = 200 goForm.Show() Define Class MyGrid as Grid ColumnCount = 2 Procedure Init This.Columns(2).RemoveObject("Text1") This.Columns(2).AddObject("Text1","MyTextbox") This.Columns(2).Text1.Visible = .T. BindEvent( ; This.Columns(1).Text1, "Valid", ; This, "ColumnValid" ) BindEvent( ; This.Columns(2).Text1, "Valid", ; This, "ColumnValid" ) EndProc Procedure ColumnValid Local laSource[1] AEvents(laSource,0) Activate Screen ? Sys(1272,laSource[1]) EndProc EndDefine Define Class MyTextbox as TextBox Procedure Valid * EndProc EndDefine
como programarlo usando el evento valid en visual foxpro calculando el igv
ResponderBorrar