Criando uma Caixa de Texto Google Suggestish em C# WinForms

Você já quis implementar uma caixa de texto inteligente em sua aplicação C# WinForms que recorda as entradas do usuário como o Google? Essa funcionalidade, frequentemente chamada de recurso de autocompletar, não apenas melhora a experiência do usuário, mas também torna sua aplicação mais adaptável ao comportamento do usuário. Neste post do blog, vamos detalhar como criar uma caixa de texto Google Suggestish que lembra as últimas x entradas, garantindo eficiência e conveniência para seus usuários.

O Problema

Ao desenvolver uma aplicação independente em C#, encontrar uma maneira eficaz de lembrar constantemente as entradas dos usuários pode ser desafiador. Os usuários esperam uma experiência contínua em que suas entradas recentes estejam disponíveis para seleção rápida, especialmente em formulários ou campos de pesquisa. O objetivo é claro: criar uma caixa de texto que retenha as últimas entradas mesmo após o fechamento da aplicação.

A Solução

A boa notícia é que implementar esse recurso é bastante simples! Usaremos AutoCompleteStringCollection do namespace System.Windows.Forms para gerenciar nossa funcionalidade de autocompletar. Além disso, salvaremos as entradas em um arquivo de texto para que as entradas sejam persistentes entre sessões.

Guia Passo a Passo

Vamos dividir a implementação em partes gerenciáveis.

1. Configurando o Formulário

Primeiro, você precisa criar uma aplicação WinForms simples com um TextBox. O TextBox precisará ser configurado para usar uma fonte de autocompletar personalizada.

namespace AutoComplete
{
    public partial class Main : Form
    {
        // Criando uma nova instância de AutoCompleteStringCollection
        AutoCompleteStringCollection acsc;

        public Main()
        {
            InitializeComponent();

            // Configurar o TextBox
            txtMain.AutoCompleteSource = AutoCompleteSource.CustomSource;
            txtMain.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

            // Inicializar o AutoCompleteStringCollection
            acsc = new AutoCompleteStringCollection();
            txtMain.AutoCompleteCustomSource = acsc;
        }
    }
}

2. Manipulando a Entrada do Usuário

Em seguida, precisamos acompanhar as entradas dos usuários. Podemos fazer isso respondendo ao evento KeyDown quando a tecla Enter for pressionada. Veja como você pode gerenciar as entradas:

private void txtMain_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        if (acsc.Count < 10)
        {
            // Adicionar o texto atual à coleção
            acsc.Add(txtMain.Text);
        }
        else
        {
            // Remover a entrada mais antiga e adicionar a nova
            acsc.RemoveAt(0);
            acsc.Add(txtMain.Text);
        }
    }
}

3. Salvando e Carregando Entradas

Para garantir que as entradas não sejam perdidas quando a aplicação for fechada, precisamos implementar mecanismos de salvamento e carregamento.

  • Salvando Entradas: Isso ocorre no evento Main_FormClosed, onde escrevemos as entradas em um arquivo.
private void Main_FormClosed(object sender, FormClosedEventArgs e)
{
    using (StreamWriter sw = new StreamWriter("AutoComplete.acs"))
    {
        foreach (string s in acsc)
            sw.WriteLine(s);
    }
}
  • Carregando Entradas: Implemente isso no evento Main_Load para preencher a caixa de texto com as entradas anteriores armazenadas no arquivo.
private void Main_Load(object sender, EventArgs e)
{
    if (File.Exists("AutoComplete.acs"))
    {
        using (StreamReader sr = new StreamReader("AutoComplete.acs"))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                acsc.Add(line);
            }
        }
    }
}

Conclusão

Seguindo esses passos, você pode criar uma caixa de texto em sua aplicação C# que lembra as últimas entradas do usuário, oferecendo uma experiência amigável reminiscentemente do recurso de autocompletar do Google.

Este guia ilustra uma implementação básica, mas fique à vontade para modificar a lógica para criar um modelo mais sofisticado de acordo com suas necessidades. Seja incorporando um sistema de avaliação para entradas ou personalizando limites de entrada, as possibilidades de aprimoramento são infinitas.

Se você tiver alguma dúvida ou ideia para compartilhar sobre a sua implementação, por favor, deixe um comentário abaixo!