Nota sobre os controles:
Eu usava tudo como array, nem importava o nome, em TAG eu colocava a configuração.
Então, no validate() ou on change() ou on lostfocus() ou outro, bastava conferir a tag.
Era algo como GET x PICTURE x VALID Validax( X ) WHEN Whenx( X )
Uma única rotina pro aplicativo inteiro pra validar e/ou formatar, etc.
É comum no VB6, quando um controle é array, existe uma única função que atende todos.
Eu extendi isso ao aplicativo inteiro.
Pra quem acha isso complexo, algo como isto no Harbour:
Código: Selecionar todos
... GET cCampo VALID Validalocal( @cCampo )
...
FUNCTION ValidaLocal( cCampo )
RETURN ValidaGeral( @cCampo )
FUNCTION ValidaGeral( cCampo )
DO CASE
CASE GetActive():Tag == "CODCLIENTE"
RETURN OkCliente( @cCampo )
ENDCASE
RETURN .T.
A IDE desviava pro local, mas eu alterava o local pra chamar o geral.
Pra que criar trocentas validações de clientes, se é sempre a mesma coisa, e uma só já resolve?
Nota: os controles são classes, então tá no assunto ainda, apesar de ser outra linguagem de programação, os controles das LIBs gráficas poderiam ter os mesmos recursos práticos.