DEFINE CLASS MytextBox AS textBox ValidRoutine = "" PROCEDURE Valid LOCAL cValid **** Change FireValid = IIF(TYPE("FireValid") # "L", .t., FireValid) IF FireValid .AND. .NOT. EMPTY(this.ValidRoutine) **** End Change cValid = this.ValidRoutine RETURN &cValid ENDIF ENDPROC ENDDEFINE **** Now Your Grid build Thisform.pageframe1.page1.coloursgrid1.RecordSource = "&mDSGrid" Thisform.pageframe1.page1.coloursgrid1.ColumnCount = mnColumnCount Thisform.pageframe1.page1.coloursgrid1.Removeobject("Column1") Local mNowCount,mColumnWidth,mColumnValid,mColumnCaption,mColumnAlignment **** Change IMPORTANT DO NOT declare this variable as LOCAL FireValid = .f. **** End Change FOR mNowCount = 2 to mnColumnCount mColumnName = "Thisform.pageframe1.page1.coloursgrid1.Column" + ALLTRIM(STR(mNowCount)) WITH &mColumnName .AddObject("MyText1","MytextBox") .RemoveObject("Text1") .CurrentControl = "MyText1" .MyText1.Visible = .t. .Alignment = 2 .Width = mDimColumnWidth(mNowCount) .MyText1.ValidRoutine = mDimColumnValid(mNowCount) .Header1.Caption = mDimColumnCaption(mNowCount) ENDWITH NEXT **** Change FireValid = .t. && This line You can skip, because After Leaving BeforeRowColChange VFP releases it. **** End Change