Neste artigo eu vou mostrar como criar uma combobox na qual podemos usar o recurso auto completar. Este recurso quando ativo , permite que a medida que o usuário digite os caracteres na combo seja feita uma filtragem dos itens da combo ; os itens filtrados serão exibidos a medida que a digitação prossegue até que o item procurado seja encontrado.
Nos já usamos este recurso no VB6 com os controles: combobox , listbox e DBCombo. Para detalhes veja os artigos abaixo:
Mas agora estamos em tempos de VB .NET. Como podemos obter o mesmo resultado ? Esta é a minha deixa...
Você já sabe que o VB .NET agora tem todos os recursos de uma linguagem orientada a objetos . Um dos pilares de orientação a objeto é a herança ( leia o artigo : VB.NET - Primeiros passos - Conceitos - V) e para você ir se habituando com estes novos recursos vamos usar a herança para criar um controle ComboBox que permita o recurso Auto Completar.
Como vamos fazer isto ? Ora , o VB .NET já oferece um controle Combobox pronto , e , com a herança , ao invés de re-inventar a roda , vamos usar o controle já pronto herdando suas propriedades e métodos. Para implementar o recurso de Auto Completar vamos apenas sobrescrever os métodos OnKeyDown e OnTextChanged e implementar o recurso da busca dos itens na combo. Agora ao trabalho...
1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
2- Inclua uma referência no projeto ao namespace System.Windows.Forms . Para isto clique com o botão direito do mouse sobre o nome do projeto e clique na opção Add Reference. Na aba .NET selecione o componente : System.Windows.Forms.dll e clique em OK , conforme abaixo:
no arquivo de classe - ComboboxAutoComplete.vb - insira o seguinte código:
Imports System.Windows.Forms
'Estamos criando uma combobox usando a herança e sobreescrevendo alguns dos seus métodos Public Class AutoCompletarComboBoxInherits ComboBox
'Usamos esta variavel para sinalizar para a sub OnTextChanged se iremos ou nao iremos usar o autocompletar Private _AutoComplete As Boolean = True
'Isto é disparadao quando uma tecla é pressionada na combo Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) 'ativa auto completar somente quando a tecla pressionada não for backspace nem delete. _AutoComplete = e.KeyCode <> Keys.Delete And e.KeyCode <> Keys.Back
'Como sobre escrevemos o evento OnKeyDown event precisamos dizer para noossa classe "Base" que uma tecla foi pressionada MyBase.OnKeyDown(e) End Sub
'disparado quando o texto na combo mudar Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
'somente faça se o usuário não pressionou backspace ou delete If _AutoComplete Then Dim TextEntered As String = Me.Text ' pega o texto atual fora da combo box Dim index As Integer = Me.FindString(TextEntered) 'FindString é o metodo na combo box que estamos usando If index >= 0 Then 'se o texto não existir nos itens da combo então... _AutoComplete = False'desabilita o auto completar enquanto mudamos o indice selecionado Me.SelectedIndex = index 'altera o index selecionado _AutoComplete = True'habilita o auto completar Me.Select(TextEntered.Length, Me.Text.Length) 'seleciona somente o texto incluido End If End If
MyBase.OnTextChanged(e) 'Como sobre escrevemos o evento OnTextChanged event precisamos dizer para nossa classe "Base" que uma tecla foi pressionada End Sub
End Class |
Destaque:
- O nome do componente que será criado será o nome definido na classe : Public Class AutoCompletarComboBox
- Inherits ComboBox - indica que estamos herdando todas as propriedades e métodos do controle Combobox
- Protected Overrides Sub OnKeyDown - indica que vamos sobrescrever o método OnkeyDown do controle Combobox
- Protected Overrides Sub OnTextChanged - indica que vamos sobrescrever o método OnTextChanged do controle combobox.
O código esta comentado e dispensa maiores detalhes.
3- Agora vamos construir o projeto usando a opção - Build ComboboxAutoComplete - do menu Build. Com isto nosso novo componente - AutoCompletarComboBox - foi criado no diretório bin da nossa aplicação e esta pronto para ser usado. Temos então um componente criado a partir de um controle existente usando os novos recursos da orientação a objetos do Vb .NET.
4- Vamos agora inserir o componente na barra de ferramentas para podermos usar o componente em nosso projeto. Abra a barra de ferramentas (Toolbox) e clique com o botão direito do mouse sobre ela. Selecione a seguir a opção - Customize Toolbox - (conforme figura ao lado) |
5- Na janela - Customize ToolBox - selecione a aba - .NET Framework Components - e clique no botão - Browse . Selecione o arquivo referente ao nosso projeto : ComboboxAutoComplete , conforme abaixo.
Pronto ! nosso componente combobox com recurso auto completar esta pronto para ser usado em qualquer projeto Windows Forms. Vamos mostrar isto agora.
Usando o ComboBox criado com recurso auto completar
1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
No
formulário padrão - form1.vb - vamos inserir o nosso controle , para isto ,
abra a ToolBox e clique na aba - General .
Observe que o nosso componente esta presente na ToolBox(veja figura ao lado). Basta arrastá-lo até o formulário e teremos algo parecido com a figura a seguir:
|
No evento Load do formulário vamos incluir o código para preencher a combo com alguns itens.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadAutoCompletarComboBox1.Items.Add("Macoratti") AutoCompletarComboBox1.Items.Add("Janice") AutoCompletarComboBox1.Items.Add("Janilda") AutoCompletarComboBox1.Items.Add("Jessica") AutoCompletarComboBox1.Items.Add("Miriam") AutoCompletarComboBox1.Items.Add("Fabio") AutoCompletarComboBox1.Items.Add("Felipe") AutoCompletarComboBox1.Items.Add("Giovana") AutoCompletarComboBox1.Items.Add("Igor") AutoCompletarComboBox1.SelectedIndex = 0 End Sub
|
Execute o projeto e digite algum caractere referente ao um dos itens da combo. Se você digitar M , o item Macoratti é localizado e exibido. Conforme você ir digitando os itens são filtrados de acordo com os caracteres encontrados nos respectivos itens.
Gostou ??? Você acabou de usar um componente criado através da herança e da sobrecarga presentes no VB .NET. Viu como a OOP facilitou a nossa vida ???
Até mais ! Aguarde mais artigos sobre o VB .NET ...
José Carlos Macoratti