VB - Acessando formulários e controles


Em 99% das suas aplicações  você usa formulários ;  geralmente os seus formulários são povoados por controles que realizam diversas tarefas . Já abordamos os formulários no artigo - Usando Formulários no VB - e não esgotamos o assunto . Esta dica pretende mostrar um conceito básico mas que pode lhe ajudar muito.

Você sabe qual o  controle ativo em um formulário ( aquele controle que tem o foco)  através da propriedade ActiveControl .

A propriedade ActiveControl retorna um handle ( uma referência) para o controle que esta ativo. Assim se o controle ativo for uma caixa de texto Text1 , ActiveControl irá retornar Text1.

Podemos então usar a propriedade ActiveControl para acessar as propriedades de um controle ou para invocar os métodos de um controle.  Exemplos :

Screen.ActiveControl.Tag = "0"

form1.ActiveControl.Text = "Teste"

Um exemplo prático da utilidade desta propriedade é sua utilização na interface MDI onde um botão na barra de ferramentas precisa iniciar uma ação em um controle de um formulário MDI Child. Quando o usuário clicar no botão Copiar na barra de ferramentas o seu código pode referenciar o texto no controle que estiver ativo no formulário MDI Child , algo assim : ActiveForm.ActiveControl.SelText.

Vejamos agora um exemplo prático para esta propriedade. Neste exemplo quando clicamos no formulário se o controle ativo form uma caixa de texto , sua propriedade text será alterada para : "Este é o controle ativo"

Private Sub Form_Click()
   If TypeOf Screen.ActiveControl Is TextBox Then
       ActiveControl.Text = "Este é o controle ativo"
   End If
End Sub

O objeto ActiveControl possui uma propriedade muito importante , a propriedade Parent . Esta propriedade retorna uma referência ( handle) para o objeto no qual o controle ativo esta colocado . Se o controle ativo estiver em um formulário a expressão ActiveControl.Parent irá retornar uma referência ao formulário ativo. Podemos então acessar as propriedades de um objeto usando esta propriedade . Ex:

ActiveControl.Parent.Caption = "Sou o formulário ativo"

command1.Parent.MousePointer = 4 'altera o ponteiro do mouse para o botão de comando ativo

Percebeu o que você pode fazer com isto ?  Não ? Você pode acessar todas as propriedades e métodos de um formulário , inclusivo passando-os como argumento para procedimentos e funções. Não percebeu o poder que tens na mão ??? Vou dar um exemplo :

Você pode criar um procedimento genérico que se aplique a todos os formulários de um projeto simplesmente passando a referência para o formulário no qual deseja que o procedimento opere: Veja :

Private Sub Pinta_Formulario(formulario As Object, cor)
   MsgBox "Alterando a cor de fundo do formulário " & formulario.Name
   formulario.BackColor = cor
End Sub

Para usar invocar a função usamos o seguinte código:

 Pinta_formulario ActiveControl.Parent , vbgreen

As possibilidades são muitas , o limite é o seu talento...

Até a próxima... Bye...