Hace algunos días venia buscando información sobre el autocompletado y encontré algunas cosas que me ayudaron y bueno ya le puse autocompletado a mi programa y quedo bien, así que tratare de explicar lo que hice y pondré un ejemplo. Para empezar encontré esta página de Msdn.
Utilice las propiedades AutoCompleteCustomSource, AutoCompleteMode y AutoCompleteSource para crear un ComboBox que complete automáticamente cadenas de entrada comparando el prefijo que se escribe con los prefijos de todas las cadenas de un origen mantenido. Esto es útil para controles ComboBox en los que se escribirán frecuentemente direcciones URL, direcciones, nombres de archivo o comandos. Si hay entradas duplicadas en el origen mantenido, la finalización automática se comporta de forma imprevisible.
Si establece ComboBoxStyle en DropDownList, la lista sólo muestra si AutoCompleteMode es Suggest o SuggestAppend.
El uso de la propiedad AutoCompleteCustomSource es opcional, pero debe establecerse la propiedad AutoCompleteSource en CustomSource para poder utilizar AutoCompleteCustomSource.
Debe utilizar las propiedades AutoCompleteMode y AutoCompleteSource juntas.
Con AutoCompleteMode establecida en SuggestAppend y AutoCompleteSource establecida en ListItems, el comportamiento es el siguiente:
- Si la lista de cadenas está vacía, al presionar la tecla RETROCESO o SUPR no sucede nada.
- Si se presiona la tecla RETROCESO menos de un segundo, se selecciona el elemento anterior o no se selecciona nada si la lista de cadenas está vacía.
- Si se presiona la tecla RETROCESO más de un segundo, se selecciona el primer elemento.
- Si se presiona la tecla SUPR, se selecciona el primer elemento.
Mas informacion tambien pueden encontrar en CSharp Corner.
Despues de documentarnos un poco vamos a poner manos a la obra. Lo que vamos a hacer es cargar un ComboBox con la datos de la tabla Clientes haciendo uso de la base de datos Northwind y luego vamos a hacer que el TextBox se autocomplete con esos datos.
Primero vamos a Cargar el ComboBox haciendo uso de la Clase y metodo que hicimos en el post anterior Programacion en Capas, en donde definimos el metodo ListarClientes.
//Creamos una instancia de la Clase mCustomers
//que es la clase donde pondremos los metodos
mCustomers ObjCust = new mCustomers();
//Creamos una lista del tipo cCustomers
List<cCustomers> LstCust = new List<cCustomers>();
private void Form1_Load(object sender, EventArgs e)
{
LstCust = ObjCust.ListarClientes(“select CustomerID, CompanyName from customers”);
CboAuto.DataSource = LstCust;
CboAuto.ValueMember = “CustomerID”;
CboAuto.DisplayMember = “CompanyName”;
AutoCompletarTxt(AutoCompleteMode.None);
}
Ahora vamos a ver le procediminto para autocompletar el TextBox
private void AutoCompletarTxt(AutoCompleteMode AuMode)
{
//Indicamos que vamos a usar una fuente personalizada
TxtAuto.AutoCompleteSource = AutoCompleteSource.CustomSource;
//El modo de Autocompletado lo vamos a pasar por un parametro
//para poder escoger con los CheckBoxes
TxtAuto.AutoCompleteMode = AuMode;
//Creamos la Clase que corresponde al tipo AutoCompleteCustomSource
AutoCompleteStringCollection aColl = new AutoCompleteStringCollection();
//Hacemos una consultaa la Lista
var auto = from obj in LstCust
select obj.CompanyName;
//Recorremos la lista
foreach (string cad in auto)
{
aColl.Add(cad);
}
//Le asignamos la fuente al TextBox y eso es todo
TxtAuto.AutoCompleteCustomSource = aColl;
}
Como veran hice una consulta para recuperar el campo CompanyName, pero seguramente habra muchas maneras de hacer esto, espero sugerencia.
foreach (string cad in auto)
{
TxtAuto.AutoCompleteCustomSource.Add(cad);
}
Tambien pudimos poner asi, y ya no crear el AutoCompleteStringCollection.
Espero consejos y criticas.
Les dejo adjunto la fuente AppAutocomplete.rar
