VB .NET - Criando texto de ajuda no TextBox

 

 Neste artigo vou mostrar como criar um texto de ajuda no controle TextBox usando o recurso de interoperabilidade para executar métodos existentes em bibliotecas escritas em código nativo.

Há um só corpo e um só Espírito, como também fostes chamados em uma só esperança da vossa vocação;
Um só Senhor, uma só fé, um só batismo;
Um só Deus e Pai de todos, o qual é sobre todos, e por todos e em todos vós.
Efésios 4:4-6

 

Você já deve ter preenchido um formulário onde aparece nas caixas de texto um texto dando uma indicação do que você deve digitar. É isso que vamos implementar nesse artigo.


Nota:  Esse recurso é muito usado em aplicações Web e aplicações mobile usando o recurso Placeholder.

 

Para realizar essa tarefa vamos usar o recurso de interoperabilidade que permite a execução de métodos contido em bibliotecas escritas em código nativo.

 

Vamos usar o atributo DllImport para reutilizar código não gerenciado e vamos acessar a biblioteca user32.dll que faz parte da API do Windows, sendo responsável por fornecer funções para manipulação de janelas, mensagens e comunicação.

 

Vamos agora à parte prática...

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome VB_TextBox_Dica e clique no botão OK;

No formulário form1.vb inclua os seguintes controles a partir da ToolBox:

  1. 4 Labels : Text = Nome, Endereço, Email e Telefone

  2. 4 TextBox - Name = txtNome, txtEndereco, txtEmail e txtTelefone

  3. 2 Buttons - btnSalvar e btnSair

Disponha os controles conforme o leiaute da figura abaixo:

 

 

Criando a classe que acessa a biblioteca user32.dll

 

No menu Project clique em Add Class e informe o nome TextBoxAjuda.vb.


A seguir inclua o código abaixo nesta classe :

 

mports System.Runtime.InteropServices
Public Class TextBoxAjuda
    Private Const EM_DEFINIR_TEXTO_AJUDA As Integer = &H1501
    <DllImport("user32.dll", EntryPoint:="SendMessageW")>
    Private Shared Function SendMessageW(ByVal hWnd As IntPtr,
                                                                ByVal Msg As UInteger,
                                                                ByVal wParam As UInteger,
                                                                <MarshalAs(UnmanagedType.LPTStr)> ByVal lParam As String) As Integer
    End Function
    ''' <summary>Exibe um texto em cinza no textbox para indicar uma mensagem de ajuda .</summary>
    ''' <param name="TxBx"> O controle textbox que vai receber o texto.</param>
    ''' <param name="TextoAjuda"> O texto a ser exibido no  textbox.</param>
    ''' <param name="LimparNoFoco">True para limpar o texto da dica de ajuda quando o textbox receber o foco, caso contrário False.</param>
    Public Shared Sub SetTextoAJuda(ByVal TxBx As TextBox, ByVal TextoAjuda As String, ByVal LimparNoFoco As Boolean)
        Dim exibirFoco As UInteger = 1
        If LimparNoFoco Then exibirFoco = 0
        SendMessageW(TxBx.Handle, EM_DEFINIR_TEXTO_AJUDA, exibirFoco, TextoAjuda)
    End Sub
End Class

 

Vamos entender o código :

 

O namespace System.Runtime.InteropServices fornece uma ampla variedade de membros que suportam a interoperação COM e a invocação de serviços da plataforma.

 

O atributo DllImport permite utilização de código não gerenciado existente em um aplicativo gerenciado; no nosso exemplo estamos fazendo chamadas a API Win32 não gerenciada.

 

A  biblioteca user32.dll faz parte da API do Windows, sendo responsável por fornecer funções para manipulação de janelas, mensagens e comunicação.

 

No código estamos criando um contrato (sem implementação) para poder usar a função existente na user32.dll no código VB .NET.

 

Usamos o EntryPoint pois a assinatura do método possui nome diferente do nome original da DLL.

 

Depois definimos o método estático SetTextoAjuda que vai usar a função SendMessageW para exibir o texto definido no controle TextBox.

 

Agora é só alegria...


Testando a nossa implementação

 

No evento Load do formulário vamos definir o código abaixo:

 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        txtNome.Font = New Font(txtNome.Font.FontFamily, 9, FontStyle.Bold)
        TextBoxAjuda.SetTextoAJuda(txtNome, "Informe o nome aqui...", False)
        txtEndereco.Font = New Font(txtEndereco.Font.FontFamily, 9, FontStyle.Bold)
        TextBoxAjuda.SetTextoAJuda(txtEndereco, "Informe o Endereço...", False)
        txtEmail.Font = New Font(txtEmail.Font.FontFamily, 9, FontStyle.Bold)
        TextBoxAjuda.SetTextoAJuda(txtEmail, "Informe o Email...", False)
        txtTelefone.Font = New Font(txtNome.Font.FontFamily, 9, FontStyle.Bold)
        TextBoxAjuda.SetTextoAJuda(txtTelefone, "Informe o Telefone...", False)
End Sub

 

Este código define a fonte e estilo usado em cada TextBox e a seguir utiliza o método SetTextAjuda da classe TextBoxAJuda para definir o texto que desejamos exibir em cada TextBox.

 

Executando o projeto iremos obter o seguinte resultado:

 

 

Pegue o projeto completo aqui :  VB_TextBox_Dica.zip

 

Porque a palavra da cruz é loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a inteligência dos inteligentes.

1 Coríntios 1:18,19

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

Referências:


José Carlos Macoratti