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. |
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:
4 Labels : Text = Nome, Endereço, Email e Telefone
4 TextBox - Name = txtNome, txtEndereco, txtEmail e txtTelefone
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET - Saindo do Windows e Fazendo o Logoff - Macoratti.net
VB .NET - Desabilitando o protetor de tela do Windows - Macoratti.net