C# - Revisitando o controle Combobox
Por ser um controle muito usado em aplicações Windows Forms o Combobox merece ser analisado com um pouco mais detalhes, assim você poderá usá-lo tranquilamente sem dúvidas quanto as suas principais propriedades.
Nos exemplos deste artigo eu estou usando o Visual C# 2010 Express Edition onde criei uma aplicação Windows Forms Application com o nome Combobox_Demo;
O controle ComboBox é um TextBox combinado com um ListBox sendo que ele permite que os usuários incluam texto no campo TextBox ou que façam uma seleção a partir de um conjunto definidos de possibilidades.
A propriedade DropDownStyle da seção Appearence da janela de propriedades do controle Combobox determina o estilo da Combobox e pode ter 3 valores:
O valor padrão é definido como DropDown que indica que a porção do texto é editável e assim o usuário pode digitar qualquer valor na área de Texto da Combobox.
Se esta propriedade for definida como DropDownList, o usuário não poderá editar diretamente o Texto na Combobox, podendo apenas selecionar valores a partir da lista.
Se o valor for definido como Simple a porção do Texto poderá ser editada e os valores da lista ficaram sempre visíveis.
Os itens definidos na lista de opções podem ser incluídos diretamente na propriedade Items da janela de propriedades e serem digitados na janela do editor de strings da coleção:
Para incluir itens individuais na lista de itens em tempo de execução podemos usar o método Add conforme o seguinte código:
for (int x = 1; x < 10; x++) { comboBox1.Items.Add("Opção " + x.ToString()); } |
Para incluir objetos em tempo de execução podemos atribuir um array de objetos com o método AddRange. A lista exibe o valor string padrão para cada objeto.
No código a seguir estamos criando um ComboBox em tempo de execução via código e definindo algumas propriedades e usamos o método AddRange para incluir itens na ComboBox:
using System; using System.Drawing; using System.Windows.Forms; namespace Macoratti { public partial class Form1 : Form { ComboBox cmb; System.Object[] ItemRange; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { CriaComboBox(); } private void CriaComboBox() { cmb = new ComboBox(); cmb.Location = new Point(12, 30); cmb.Size = new Size(168, 20); cmb.DropDownWidth = 150; IncluiItems(); Controls.Add(cmb); } private void IncluiItems() { ItemRange = new System.Object[5]; for (int i = 0; i <= 4; i++) { ItemRange[i] = "Opção " + i; } cmb.Items.AddRange(ItemRange); } } } |
A rotina CriaComboBox() é chamada no evento Load do formulário. Esta rotina cria um novo
controle ComboBox , define o seu tamanho e posição e
chama A rotina IncluiItems() inclui 5 itens na lista de itens do controle usando o método AddRange. |
Incluindo e removendo Itens
A propriedade Combobox.Items permite que você obtenha uma referência a lista de itens que esta atualmente armazenada na Combobox. Com esta referência, podemos incluir itens, remover itens e obter o número de itens na coleção.
Os itens exibidos são em geral strings mas qualquer objeto pode ser usado. No exemplo a seguir veremos como incluir e remover itens individuais.
Inclua dois botões de comando btnIncluirItens e btnRemoverItens no formulário e a seguir defina o seguinte código no evento Click do botão btnIncluirItens para incluir itens após o último item da lista da Combobox:
private void btnIncluirItens_Click(object sender, EventArgs e) { // para inserir na última posição int cnt = cmb.Items.Count; if (txtItens.Text != String.Empty) { cmb.Items.Insert(cnt, txtItens.Text); } else { cmb.Items.Insert(cnt, "Item " + cnt); } txtItens.Text = ""; //limpa a caixa de texto após a inclusão } |
O método Insert inclui um item na lista de itens em uma posição específica. |
Em seguida inclua o seguinte código no evento Click do botão btnRemoverItens para remover
private void btnRemoverItens_Click(object sender, EventArgs e) { cmb.Items.Remove(cmb.SelectedItem); } |
O método Remove() remove o
item selecionado na ComboBox; Para remover um item de um índice especifico ,usamos o método RemoveAt() Ex: cmb.Items.RemoveAt(0) |
Procurando um Item na Combobox
O método FindStringExact pode ser usado para encontrar o primeiro item na combobox que coincide com o critério de busca definido.
O valor retornado é um índice com base zero do primeiro item encontrado; no caso de nenhum item ser encontrado será retornado o valor -1.
O parâmetro passado para este método é uma string que é comparada contra o texto associado com os itens na lista da combobox.
A busca procura por equivalência iniciando a partir do início do texto, retornando o primeiro item na lista que satisfaz o critério.
Existem também o método FindStringExact(String,Int32) que toma uma string bem como um inteiro como parâmetro. Este método é usado para encontrar o primeiro item depois do índice especificado que satisfaz o critério definido de busca.(A busca realizada por este método não e case-sensitive)
No exemplo a seguir usamos o método FindStringExact para realizar uma procura na ComboBox. Para testar este código inclua um botão de comando btnProcurar no formulário e no evento Click do botão inclua o código a seguir:
private void btnProcurar_Click(object sender, EventArgs e) { procuraStringNaCombo(); } private void procuraStringNaCombo() { int res = -1; if (txtItens.Text != String.Empty) { // O método FindStringExact procura a primeira ocorrência na lista res = cmb.FindStringExact(txtItens.Text); // FindStringExact retorna -1 se nada for encontrado if (res != -1) { MessageBox.Show(String.Format("A string {0} foi encontrada na posição {1}", txtItens.Text, res)); cmb.SelectedIndex = res; } else { MessageBox.Show("A string informada não foi localizada na lista"); } } else { MessageBox.Show("Informe a string para busca", "Valor inválido"); txtItens.Focus(); } } |
No evento Click do botão Procurar chamamos a rotina procuraStringNaCombo() e esta rotina usa o texto informado na caixa de texto como parâmetro para a função FindStringExact();
O resultado pode ser visto abaixo:
Definindo um Combobox AutoCompletar
Você já deve saber que uma das formas de você implementar este recurso é usar as propriedades AutoCompleteMode e AutoCompleteSource.
Para incluir a funcionaliade de AutoCompletar na Combobox podemos usar a propridade AutoCompleteMode que obtém ou define uma opção que controla como o preenchimento automático funciona para a ComboBox. Os valores possíveis são:
Obs: AutoCompleteCustomSource - permite definirmos uma lista de informações que serão consultadas quando for preciso completar automaticamente um controle.
Segue abaixo um resumo dessas propriedades para refrescar a sua memória:
Obtém ou define um valor
especificando a fonte de strings completas usadas para o
auto-preenchimento automático. Use as propriedades AutoComplteCustomeSource, AutoCompleteMode e AutoCompleteSource para criar um ComboBox que completa automaticamente uma cadeia de caracteres de entrada comparando o prefixo que esta sendo inserido com os prefixos de todas as cadeias de caracteres em uma origem. De forma resumida podemos definir cada uma destas propriedades: - AutoCompleteMode:
define o comportamento do Auto Complete; (Opções: None,
Append, Suggest e AppendSuggest) As opções possíveis para AutoCompleteCustomSource são:
|
No exemplo a seguir vemos como ativar o preenchimento automático. Para isso vamos definir o estilo da como Combobox como DropDown e na propriedade AutoCompleteMode vamos definir os valores Append,Suggest e SuggestAppend;
Obs: Para exibir a lista da combobox automaticamente quando o controle for exibido basta definir a propriedade DroppedDown como true;
Para o nosso exemplo vamos redefinir a definição da ComboBox na rotina CriaComboBox();
// Habilitar o preenchimento Automático cmb.DropDownStyle = ComboBoxStyle.DropDown; cmb.AutoCompleteMode = AutoCompleteMode.Suggest; cmb.KeyPress += new KeyPressEventHandler(cmb_KeyPress); |
No evento KeyPress do controle ComboBox vamos definir o código:
private void cmb_KeyPress(object sender, KeyPressEventArgs e) { //habilitar a abertura automatica da combo. cmb.DroppedDown = true; } |
Dessa forma temos a ativação do preenchimento automático.
Simples , simples assim...
Eu sei é apenas C#, mas eu gosto...
Referências: