LOCAL cColCtlSrc, nColWidthDesired thisform.LockScreen = .t. FOR Each oColumn IN this.Columns cColCtlSrc = UPPER(oColumn.ControlSource) cColCtlSrc = SUBST(cColCtlSrc,RAT('.',cColCtlSrc)+1)) && strip alias if present nColWidthDesired = oColumn.Width DO CASE CASE cColCtlSrc = "FOO" nColWidthDesired = <i>some numeric value</i> CASE cColCtlSrc = "BAR" nColWidthDesired = <i>some other numeric value</i> CASE cColCtlSrc = "MUMBLE" nColWidthDesired = <i>Yet another numeric value</i> * add a case for any field whose width needs changing ENDCASE oColumn.Width = nColWidthDesired ENDFOR thisform.LockScreen = .f.This isn't the only solution - you could build a table with field names and values and data-drive the process. You only need to examine the column controlsource values that would need to be changed in the DO CASE...ENDCASE; the default value assigned will be used if you don't override it.