sábado, 19 de septiembre de 2009

C# – AutoComplete ComboBox o TextBox

 

Introducción


Muchas veces es necesario exponer al usuario herramientas de búsqueda que le faciliten la interacción con la aplicación que desarrollamos.

Una de estas herramientas es precisamente el AutoComplete, por el cual el usuario podrá ir visualizando los ítems existentes a medida que se escribe en un control.

TextBox AutoComplete


Hacer uso de las opciones de autocomplete de estos controles es bastante simple, solo hace falta especificar un par de propiedades, pero hay que tener en cuenta algunos puntos.

Estas propiedades son:

AutoCompleteSource

AutoCompleteMode

AutoCompleteCustomSource

textBox1.AutoCompleteCustomSource = DataHelper.LoadAutoComplete();
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

En el ejemplo se visualiza como asignar estas propiedades, pero debe prestarse atención a la propiedad “AutoCompleteCustomSource” esta es clave, pues contendrá la lista de ítems.

Esta propiedad es justamente uno de los puntos a tener en cuenta, ya que requiere cargar una lista de ítems que provenga de una colección del tipo “AutoCompleteStringCollection”

Es por ello que en el ejemplo se visualiza la generación de los datos que cargaran esta colección

public static AutoCompleteStringCollection LoadAutoComplete()
{
    DataTable dt = LoadDataTable();

    AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection();

    foreach (DataRow row in dt.Rows)
    {
        stringCol.Add(Convert.ToString(row["Nombre"]));
    }

    return stringCol;
}

El código es bastante simple de entender, se obtiene los datos desde la db y como siguiente paso los recorre cargando la lista de ítems del autocomplete.

ComboBox AutoComplete


La utilización de las opciones de autocomplete de un control Combobox son idénticas a las de un TextBox, solo difiere en que el combo requiere cargar sus ítems previamente para la selección por parte del usuario.

O sea el combobox requiere dos listas para bindear

- una normal que se asignara al DataSource, y en donde se especificara tanto el valor a desplegar como el valor de la key

- una especial con la lista de descripciones para el autocomplete

//
// Cargo los datos del combobox
//
comboBox1.DataSource = DataHelper.LoadDataTable();
comboBox1.DisplayMember = "Nombre";
comboBox1.ValueMember = "Id";

//
// cargo la lista de items para el autocomplete
//
comboBox1.AutoCompleteCustomSource = DataHelper.LoadAutoComplete();
comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

Conclusión


El autocomplete es una excelente opción para ayudar al usuario en la interacción con la aplicación brindándole un fácil acceso mientras escribe la búsqueda.

 

[C#] 
[VB.NET] 

176 comentarios:

  1. Gracias! Estaba buscando algo así!

    ResponderEliminar
  2. Hola Leandro, tenés autocomplete combo box en datagridview?

    ResponderEliminar
  3. con esta funcion del autocompletado no funcionan los eventos keypress down o up simplemente selecciona el texto al dar enter y no hace nada, me podrian ayudar a que se auto omplete y que entre al evento keypress

    ResponderEliminar
  4. hola

    Con respecto al keypress, he realizado algunas pruebas y puede notar que el evento funciona perfectamente.

    En el ejemplo que use detecto la presion de la tecla "a", con este codigo:
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (e.KeyChar == 'a')
    MessageBox.Show("se presiono A");
    }

    lanzara un mensaje y lo hizo sin problemas.

    Por ahi habria que verificar si el handler del evento esta bien asignado.

    Para esto selecciona el textbox, presiona F4, con esto veras la propiedades del control, luego en el "Solution Explorer" presiona en al icono de forma de rayo color amarillo, con esto veras los eventos, bien alli busca el keypress, y valida que tenga algun metodo del evento asignado.

    Sino hay nada entonces esa es la causa por la cual no funciona, es que no estab asociado el handler del evento

    saludos

    ResponderEliminar
    Respuestas
    1. hola necesito saber como hago para vaciar los textbox cuando están en modo auto completar, por ejemplo si quiero con un botón reiniciarlos a todos.
      Del modo tradicional seria textbox1.text=" ", pero cuando tienen el auto completar no logro hacerlo me interesaría si me ayudan.

      Eliminar
  5. Hola,

    He observado que si seteamos las propiedades de autocomplete como custom....
    y cargando mi propia AutoCompleteCustomSource... siempre me sugiere
    elementos de la lista que comienzan con el texto que voy ingresando.. por
    ejemplo

    si ingreso "Buen"
    me va sugiriendo "Buen Dia" "Buenas Noches" "Buenos Aires"

    es decir va mostrando las opciones que comienzan con lo ingresado.....

    Pero, yo quisiera.. que me muestre todas las opciones que por lo menos
    contengan lo que voy ingresando..
    por ejemplo:

    si ingreso "Bue"
    me deberìa mostrar: "Buen Dia" "Capital Buenos Aires" "Buenas Noches" "Mi
    viaje Bueno"

    Sin embargo, el comportamiento es como yo busco, cuando AutoCompleteSource
    se establece en AllUrl....

    si ingreso por ejemplo Goo me aparece http://www.google.com.ar

    Pero claro.. con este seteo la lista no es la que necesito...

    alguien conoce la manera de realizarlo?


    Muchas Gracias

    ResponderEliminar
  6. Gaston, que tal

    Estuve viendo el tema que planteas, y no tengo buenas noticias, lamentablemente la funcionalidad que viene por defecto en el autocomplete no contempla la posibilidad de buscar en cualquier parte del texto.

    Es mas lo que has sugerido con el uso del AutoCompleteSource = AllUrl, tampoco funciona como lo describes. Has una prueba, en lugar de tipear goo, tipea gle, o se la parte final de la palabra, veras que no encuentra ningun resultado, bien lo que sucede es que en la busqueda como sabe que es una url, descarta el http://, pero despues solo muestra aquellos que inicien con lo tipeado.

    Por ahi podrias implementar lo que sugiere este link:
    AutoComplete c#

    como veras usa un textbox y un listbox para mostrarlo u ocultarlo segun la busqueda, pero lo interesante es que usa la linea:
    if (s.Contains(textBox1.Text))

    El Contains() devuelve si en cualquier parte del texto se encuentra el texto a buscar.

    Se que no es lo mejor, pero seria una solucion que si funciona.

    saludos

    ResponderEliminar
    Respuestas
    1. Hola Leandro, como puedo asignar un valor a un combobox cargado con una lista de Entidades, el select value no me funciona por favor solicito tu ayuda.
      De antemano muchas gracias!!

      Eliminar
  7. Leandro, muchas gracias por tu pronta respuesta.
    Efectivamente, no creo que tenga muchas mas posibilidades que crear un usercontrol que contenga un textbox y un listbox como para "simular" el autocomplete

    He tratado de realizar este usercontrol, pero sigo con los problemas :)...
    En este control agreguè el textbox, y despues analizando el texchange...
    creo en tiempo de ejecucion el listbox, y lo pongo debajo.. simulando... el autocomplete...
    ahora bien......
    este usercontrol tiene que tener de alto, ademas de la altura del textbox... la altura del "futuro" listbox que se crearà
    entonces me queda INMENSO..
    si solo pongo el tamaño del alto del textbox, no se muestra el listbox...

    si tienes alguna idea te la agradecerìa. Gracias de nuevo

    un saludo

    ResponderEliminar
  8. Muy buen aporte el de aqui, muchas gracias :). Tambien queria agradecerte por este proyecto personal el que tienes, espero siga asi; ah! y me olvidaba acabo de leer tu MVP felicitaciones :D!!! yo ni sabia que existia una mension tan importante. Saludos

    PD: Estoy buscando el suscribirme pero no lo encuentro :S

    ResponderEliminar
  9. hola areseo

    Que bueno que resulte util, me alegro

    Habilite en la barra derecha la opcion de seguimiento

    saludos

    ResponderEliminar
  10. Hola leandro, tengo una duda,..cómo puedo seleccionar de la lista de sugerencias del autocomplete con la tecla direccional de abajo.. esq cuando le doy me selecciona por defecto la primera sugerencia. p ejemplo:
    Al escribir jose
    me dan resultados de autocomplete:

    jose carlos
    jose maria
    jose mouriño
    etc.

    yo quisiera seleccionar el de jose mouriño con la tecla direccional de abajo, cómo lo haria sin escribir todo el texto

    ResponderEliminar
  11. hola Juan Carlos

    No has probado presionar en repetidad veces la flecha hacia abajo del teclado (esto seria cuando se desplegan las opciones), no esto 100% seguro pero creo que si lo haces ira seleccionado los item de la lista del autocomplete

    saludos

    ResponderEliminar
  12. ¿Y si quisiera que no solo me mostrará el nombre sino tambien el apellido?

    ResponderEliminar
  13. hola David

    Lo que podrias hacer en ese caso es directo en la query que usas para cargar la info, unir los dos campos

    o sea usar

    SELECT Nombre + ' ' + Apellido As NombreCompleto FROM NombreTabla

    como veras ahora usarias el campo "NombreCompleto" para el autocomplete

    saludos

    ResponderEliminar
  14. Hola Leandro, revisé el código tuyo y al ejecutar me sucede lo mi mismo que mi comentario en http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/39c0d9c1-8d7a-47da-be3f-6ddecf4b9d2f

    Agradeceré de tu ayuda.
    Saludos
    MG

    ResponderEliminar
  15. hola Marzo

    Imagino te refieres a la busqueda en cualqueir parte del texto, si es eso seguro sucedera porque la implementacion de la busqueda es de esta forma por como viene implementada en el control.

    Salvo que desarrolles tu propio control (que quizas herede de un textbox) y que aplique el autcomplete custom, no veo como de forma nativa por como viene el control se podria aplciar este tipo de busqueda.

    saludos

    ResponderEliminar
  16. muchas gracias me ha servido de mucho..!!

    ResponderEliminar
  17. hola leandro disculpa quisiera saber si en vez de utilizar un datatable puedo utilizar un dataset? me imagino que el codigo cambiaria un poco no? de antemano muxas gracias

    ResponderEliminar
  18. hola Pakito1090

    pero si solo vas a obtener informacion de una unica tabla que sentido tendria cargar un dataset ?

    la tecnica es la misma puede cargar el dataset, solo que despues deberias usar

    Dim dt As DataTable = ds.Tables(0)

    o sea obtieness el datatable del dataset, por eso digo que no tiene sentido usarlo en este caso


    saludos

    ResponderEliminar
  19. Hola Leandro.

    Lo primero agradecerte este artículo. Me ha sido de gran ayuda y era justo lo que estaba buscando.

    Yo, al igual que preguntaba David el pasado 9 de Marzo de 2011, quiero sacar 2 campos en el autocomplete, pero que cuando seleccione el valor que quiero de la lista, solo me recoja uno de los dos campos. Es decir, yo monto la consulta para que me aparezca: codarticulo + nomarticulo. Pero cuando escojo el valor que quiero que solo me aparezca en el textbox el valor de codarticulo.

    ¿Sabrías como podría hacer esto?

    Muchas gracias por tus artículos.
    Un saludo.

    ResponderEliminar
  20. hola Quique

    usando el control estandar que incluye .net no creo que exista la posibilidad de plantear una busqueda de esta form

    no has evaluado quizas usar un combobox, que tambien tiene autocomplete ? este si tiene un ValueMember que retornaria un valor diferente al visualizado

    saludos

    ResponderEliminar
  21. hola Lenadro podrias ayudarme con lo siguiente:
    tengo esto...
    //COMBO DE PRODUCTO
    comboPro.DisplayMember = "des_prod";
    comboPro.DataSource = productoBindingSource;
    comboPro.ValueMember = "cod_prod";

    cargo datos de la tabla producto y muestro en mi formulario el nombre del producto para que el usuario seleccione, este combo pertenece a un formulario de factura, al querer guardar el cod del producto a mi tabla de detalle de factura no lo puedo hacer.
    yo agrego datos a las tablas con el INNER JOIN, y luego uso el sigte codigo:

    EJEMPLO1
    comando.Parameters.AddWithValue("@totalitem", total);

    AHORA EL CODIGO DE PRODUCTO LO QUIERO HACER ASI comando.Parameters.AddWithValue("@cod_prod_fact", ??? AQUI DEBO PONERLO);

    Como extraigo el cod de prod del productoBindingSource ? obviamente q coincida con la descripcion de producto seleccionada

    quedo a espera de tus sugerencias, por favor ayudame

    mil gracias

    Saludos¡¡

    ResponderEliminar
  22. hola VADA

    y si haces

    comando.Parameters.AddWithValue("@cod_prod_fact", Convert.ToInt32(comboPro.SelectedValue));

    como veras recuperas la seleccion del combo no del datasource

    saludos

    ResponderEliminar
  23. Gracias men justo lo que anda buscando.. (y)

    ResponderEliminar
  24. Gracias, tenias toda la razon tu solucion me dio resultado =), si necesito algo mas te buscare.

    ResponderEliminar
  25. Ayudame con algo mas por favor

    tengo esto:

    private void comboHistorial_SelectedIndexChanged(object sender, EventArgs e)
    {
    string codclie;
    codclie = Convert.ToString(comboHistorial.SelectedValue);
    SqlConnection conexlinksat = new SqlConnection();
    conexlinksat.ConnectionString = @"Data Source=.;Initial Catalog=ventas;Integrated Security=True";
    SqlCommand comandolinksat = new SqlCommand("select cab_factura.num_fact,fec_fact,fec_venc,gui_remi,des_fact,tot_gen_fact,for_pag_fact,vend_fact from cliente inner join cab_factura on cliente.id_clien = cab_factura.id_clien_fact inner join deta_factura on cab_factura.num_fact = deta_factura.num_fact inner join prod_factura on prod_factura.num_fact = deta_factura.num_fact WHERE cliente.id_clien='" + codclie + "'", conexlinksat);

    comandolinksat.Parameters.AddWithValue("@codclie", codclie);

    SqlDataAdapter MiDataAd = new SqlDataAdapter(comandolinksat);
    DataTable Midatatable = new DataTable();
    MiDataAd.Fill(Midatatable);
    dataGridHistorial.DataSource = Midatatable;
    }



    quiero seleccionar un cliente de un combobox y mostrar todo lo que esta en mi select. Como hago para cargar los datos al grid???

    ResponderEliminar
  26. ya no es necesario lo resolvi con este codigo


    private void comboHistorial_SelectedIndexChanged(object sender, EventArgs e)
    {

    SqlConnection conexlinksat = new SqlConnection();
    conexlinksat.ConnectionString = @"Data Source=.;Initial Catalog=ventas;Integrated Security=True";
    SqlCommand comandolinksat = new SqlCommand("select cab_factura.num_fact,fec_fact,fec_venc,gui_remi,des_fact,tot_gen_fact,for_pag_fact,vend_fact from cliente inner join cab_factura on cliente.id_clien = cab_factura.id_clien_fact inner join deta_factura on cab_factura.num_fact = deta_factura.num_fact inner join prod_factura on prod_factura.num_fact = deta_factura.num_fact WHERE cliente.raz_soc_clien='" + comboHistorial.Text + "'", conexlinksat);

    SqlDataAdapter MiDataAd = new SqlDataAdapter(comandolinksat);
    DataTable Midatatable = new DataTable();
    MiDataAd.Fill(Midatatable);
    dataGridHistorial.DataSource = Midatatable;

    conexlinksat.Open();
    comandolinksat.ExecuteNonQuery();
    conexlinksat.Close();
    }


    estaba agregando codclie sin necesidad...
    Gracias igual

    ResponderEliminar
  27. hola VADA

    mas alla que hayas solucionado el problema dos comentarios

    - no uses del combo el evento SelectedIndexChanged, usa el SelectionChangeCommited, ya que el primero se dispara ante cualqueir cambio, mientras que el segundo solo si es un cambio generado por el usuario al seleccionar un item

    esto puede evitarte miles de problemas


    - segundo usa paramtros en tu query, no concatenes el string, no uses esto

    WHERE cliente.raz_soc_clien='" + comboHistorial.Text + "'", conexlinksat);

    usa

    WHERE cliente.raz_soc_clien=@razsoc", conexlinksat);

    comandolinksat.Paraemters.AddWithValue("@razsoc", comboHistorial.Text)

    como vers usas la coleccion parameters del command para asignar el valor


    saludos

    ResponderEliminar
  28. Hola Leandro

    bueno si tengo problemas con el SelectedIndexChanged al iniciar el form se cargan datos del 1er cliente en el grid, pero si deseo ver datos de otro cliente me los carga sin ningun problema; en cambio si uso el SelectionChangeCommited al iniciar el form no hay datos en el grid(problema resuelto con respecto a SelectedIndexChanged)pero si quiero seleccionar otro cliente me carga inicialmente 0 luego le doy otro click y cargan los datos, ahora quiero otro cliente doy click y no se borran del grid los datos del cliente anterior doy otro click y ahi me muestra los datos; como entenderas debo seleccionar 2 veces a un cliente para q me cargue datos al grid, uso dataGridHistorial.Rows.Clear(); para borrar y da errores o tambien uso dataGridHistorial.SeletedClear(); y tambien...
    si me puedes ayudar con esto t lo agradezco mucho...
    Saludos Cordiales
    Verónica

    ResponderEliminar
  29. hola VADA

    claro pero es que cuando suas el SelectionChangeCommited tu controlas cuando quiers que sucan las cosas, por eso si al inicio no se ejecuta la primer accion tu la invocas

    se supone que tienes un metodo comun que puedes invocar para cargar, imagina no tienes todo el codigo peusto en el metodo de un evento, cosa que puedas invocarlo ya que con el SelectionChangeCommited no se realiza solo y eso es lo bueno, tu lo controlas

    analiza como lo hago aqui

    [WinForms] ComboBox Anidados

    saludos

    ResponderEliminar
  30. he tomado este codigo que funciona de marivilla pero cuando se trata de pocos registros, sin embargo yo hago el autocompletar de una tabla que contiene alrededor de 150mil registros y me demora 4 minutos cargar el autocomplete. existe alguna forma de reducir esa exagerada cantidad de tiempo que como todos sabemos aqui significa que lo primero que diran los demas es que la aplicacion NO SIRVE

    ResponderEliminar
  31. hola alexis

    hasta dodne se en este tipo de autocomple que proporciona los controles no se puede realizar una carga bajo demanda

    el textbox deba contar con la totalidad de los items que puede usar para resolver

    no lo he probado, pero quizas si en el evento keypress vas cambiando el AutoCompleteCustomSource
    filtrando por lo que se escribe, podrias ir tomando de a poco la sugerencia y no tener que cargarla completa

    igual te comento no lo he intentado solo es una idea

    saludos

    ResponderEliminar
  32. He tomado tu ejemplo y funciona de maravilla el autocomplete, pero para pocos registros.. Me sucede lo siguiente en una pantalla winform. Al iniciar, caraga rapidisimo unos 6,000 registros.. Pero necesito q al guardar datos en esa pantalla, el autocomplete se actualize.. x lo q llamo d vuelta al proceso que carga el textbox. pero ahi se demora unos 2 min para cargarlos. Quizas hay q liberar o limpiar variables pero no puedo darle aun..
    este es mi codigo

    public void CargarAutoCompleteClienteDocumento()
    {
    try
    {
    SqlDataReader dReader;
    Cliente oC = new Cliente();
    docusCollection.Clear();

    txtIdentificacion.AutoCompleteCustomSource.Clear();
    dReader = oC.GetClienteDocumentoAutoComplete();
    if (dReader.HasRows == true)
    {
    while (dReader.Read())
    docusCollection.Add(dReader["sTipoIdentificacion"].ToString());
    }
    else
    {
    docusCollection.Add("");
    }
    dReader.Close();
    txtIdentificacion.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    txtIdentificacion.AutoCompleteSource = AutoCompleteSource.CustomSource;
    txtIdentificacion.AutoCompleteCustomSource = docusCollection;
    }
    catch (Exception ex)
    {

    }
    }

    ResponderEliminar
  33. hola Leando una ultima consulta, cuando escribo en el autocomplete y encuentro la sugerencia, si le doy click a la sugerencia el evento SelectionChangeComitted no hace nada de lo que le programe, pero si busco directamente en el combobox y le doy click ahi si se dispara el evento.
    como hago en este caso?? porque la idea es escribir y me bote la sugerencia no abrir el combobox y seleccionarla
    ayuda porfavor

    ResponderEliminar
  34. hola alexis

    si lo que planteas no lo veo tan directo como parece, mas que nada porque la funcionalidad no lo implementa de esta forma

    no ahs probado en este caso si usar el SelectedIndexChanged

    o sino evaluar algun control textbox de terceros que si permita la busqueda con carga asincrona

    saludos

    ResponderEliminar
  35. hola AlejandroAM

    cuando agregas un item y quieres que se actualice, no has evaluado no recargar la lista de autocomplete sino solo agregar un item a la misma

    con esto evitarias tener que recargar tantos registros para la busqueda, cuando se crea un item lo agregas a la coleccion en lugar de recargar

    saludos

    ResponderEliminar
  36. HOLA lEANDRO UNA CONSULTA, SI DESEO TRABAJAR CON WEB SERVICE, DESEARIA LLENAR UN TEXTBOX EN BASE A LA SELECCION DE UN COMBO POR EJEMPLO

    SI MI COMBO TENGO--> ALIMENTOS, INFORMATICOS, ETC

    SI SELECCIONO ALIMENTOS, EN MI TEXTBOX CUANDO ESCRIBA LA LETRA M ME TIENE Q MOSTRAR COMO UNA LISTA DESPLEGABLE TODO LOS PRODUCTOS Q PERTENECEN A ESE GRUPO CON LA LETRA M ... COMO LO HARIA PORFAVOR ESPERO TU GRAN APORTE

    ResponderEliminar
  37. hola leandro he probado con el SelectedIndexChanged y lo mismo que con el otro pero con lo molesto de que cada vez que cargo el form se lanza ese evento :D

    ResponderEliminar
  38. Esta forma de de buscar mientras se escribe tiene limitaciones? Ósea, que tal si la tabla tiene un millón de registro? Funciona bien? O es solo para tablas con pocos registros. Disculpa, en verdad soy nuevo en esto.

    ResponderEliminar
  39. hola MiAulaVirual

    limitaciones tiene, como ser el caso que solo busca por las primeras letras, ademas que no siempre realiza las busquedas con todo lo que se escribe sino con la ultima letra pulsada, si se escribe AL, buscara con L (la ultima tecla pulsada), y no con AL o sea las dos letras

    no lo he probado con 1 millon de registros pero imagino que el problema aqui no seria la busqueda en si mismo, sino el proceso que cargaria los datos

    saludos

    ResponderEliminar
  40. Hola Leandro , tengo un combo el cual tiene las dos propiedades activadas "AutoCompleteMode" y "AutoCompleteSource", se carga con un Procedimiento Almacenado.

    ejemplo : en mi combo tengo los items "DONAS RELLENAS" Y "DONAS FRESA".

    cuando escribo la primera letra que en este caso es "D" me muestra todas las palabras que empiezan con dicha letra , ahora lo que necesito es que al escribir D espacio y la primera letra de la segunda palabra que en este caso puede ser R o F para ser mas especifico, se mantenga aun los resultados de la busqueda.

    ejemplo : D R

    y tiene que aparecer DONAS RELLENAS.

    mi SP es el siguiente:

    create procedure USP_COMBOS
    @Opcion varchar(2)="",
    @valor01 varchar(100)="",
    @valor02 varchar(100)=""
    as

    select IdProducto,(Producto_Nombre +' '+Descripcion) as Productos
    from Producto_Terminado
    where Producto_Nombre like '%' + @valor01 + '%' and Descripcion like '%' + @valor02 + '%'

    order by 1 asc

    mi funcion:

    Public Function getCombos(ByVal Opcion As String, ByVal Valor01 As String, ByVal Valor02 As String) As DataTable
    Try
    Dim con As New SqlConnection(conex)
    Dim dap As New SqlDataAdapter("USP_COMBOS", con)
    Dim dst As New DataSet
    With dap.SelectCommand
    .CommandType = CommandType.StoredProcedure
    .Parameters.Add(New SqlParameter("@Opcion", SqlDbType.VarChar, 2)).Value = Opcion
    .Parameters.Add(New SqlParameter("@valor01", SqlDbType.VarChar)).Value = Valor01
    .Parameters.Add(New SqlParameter("@valor02", SqlDbType.VarChar)).Value = Valor02
    End With
    dap.Fill(dst, "tCOMBOS")
    Return dst.Tables("tCOMBOS")
    Catch ex As Exception

    End Try
    End Function

    en el VB :

    Private objx As New ClsVentas
    Private Sub llenarCombos()
    With cboproducto
    .DataSource = objx.getCombos(9, "", "")
    .DisplayMember = "Productos"
    .ValueMember = "IdProducto"
    End With
    end sub

    Private Sub frmNuevaVenta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    llenarCombos()

    End Sub

    y creo que para poder extraer las letras del texto en el combo y hacer la consulta necesaria tendras que ir en el evento keypress, pero no me ejecuta nada solo la primera letra que es por default.


    Private Sub cboproducto_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cboproducto.Keypress
    Dim texto As String = cboproducto.Text.Trim()
    Dim palabras() As String = texto.Split(" ")
    If palabras.Length >= 2 Then
    cboproducto.DataSource = objx.getCombos(9, palabras(0).ToString, palabras(1).ToString)
    End If
    End Sub

    espero que me puedas ayudar gracias.

    ResponderEliminar
  41. hola puchingo22

    hasta donde se esa funcionalida dno puede lograrse con la implementacion que planteas el autocomplete de los controels del VS

    quizas si se consigue algun control de terceros que lo implemente, pero con el del VS hasta donde se no se puede

    saludos

    ResponderEliminar
  42. hola leandro.
    sabes estoy usando un autocomplete que funciona, ahora quiero crear un evento que al darle enter que llene varios textbox pero no me esta funcionando en realidad no tengo idea como hacerlo.

    ResponderEliminar
  43. hola Ricardo

    pero detectas el enter como hago aqui

    [ADO.NET] – Parte 5 - Ejemplos Simples – Operaciones CRUD

    analiza el evento keypress del ejemplo

    saludos

    ResponderEliminar
  44. Hola Leandro, tengo una consulta con respecto Winform en C#. Por ejemplo creo un UserControl para mostrar Paises el cual esta compuesto por un textbox (donde ingreso el código pais ó lo muestro) y un combobox (donde muestra el nombre del pais). Cuando muestra el form que contiene el usercontrol puedo cargar los datos con el combobox:

    ...CargarCombo()

    List listado = new List();

    listado = ListarPais(transac, obj);

    cboPais.DataSource = listado;
    cboSexo.DisplayMember = "Desc_Pais";
    cboSexo.ValueMember = "Cod_Pais";

    ....

    private void cboSexo_SelectedIndexChanged(object sender, EventArgs e)

    txtCodPais.Text = cboPais.SelectedValue.ToString();

    ....

    Quisiera que al ingresar el codigo del pais en el textbox y presione enter, me muestre en el combobox el pais que este relacionado al código y también si en el combobox selecciono algún nombre de pais me muestre en el textbox su código respectivo.

    Gracias.

    ResponderEliminar
  45. hola Julio

    en el codigo hay algo raro, analiza estas tres lines:


    cboPais.DataSource = listado;
    cboSexo.DisplayMember = "Desc_Pais";
    cboSexo.ValueMember = "Cod_Pais";

    la primera dice cboPais, pero las otras dos cboSexo, eso esta correcto ? me parece que algo no esta bien

    saludos

    ResponderEliminar
  46. hola mi estimado.. tengo un trabajo .. se trata de mostrar en un listbox la cantidad de veces que se ingresan datos en un textbox.

    se ingreso en el

    textbox1: n
    luego
    textbox1: m

    en el listbox debería de mostrar el numero 2

    ResponderEliminar
  47. hola Esau

    no entendi porque en el listbox se mostraria un 2 ? o sea el listbox puede desplegar una lista de items, porque si escribes dos valores diferentes el listbox solo mostraria un numero

    ahora si dijeras quen cada valor ingresado se va copiando como item al listbox eso seria otro tema

    saludos

    ResponderEliminar
  48. como pordria atravez del dato encontado llenar otro textbox con la informacion del producto por ejemplo mostrar el codigo y una cantidad en exixtencias una vez seleccionado el nombre. gracias espero me ayuden

    ResponderEliminar
  49. hola william

    el tema es que si necesitas identificar un producto quizas hacerlo por el nombre no se buena idea, porque podrias ahber varios iguales, salvo que puedas asegurar que el nombre sea unico

    quizas una opcion como el buscar de este articulo

    [N-Tier] – Desarrollo en capas - Ejemplo Facturación – Parte 1


    saludos

    ResponderEliminar
  50. Hola Leandro !!

    una preg. como hacerle para que al momento de seleccionar un item del combobox muestre su equivalenccia en un textbox
    o sea me explico:
    la tabla tiene
    ID: 1, 2, 3
    nombre: lucy, berenice, marcela
    la idea es al seleccionar el item 2 del combobox, en la caja de texto aparezca el nombre de BERENICE.

    Si pudieras ayudarme te lo agradeceria mucho !!

    ResponderEliminar
  51. hola Karlos

    eso que planteas va mas alla de autocmplete, debes realizar simplemente una query que filtre por el i y recupere los datos de la entidad

    [ADO.NET] – Parte 5 - Ejemplos Simples – Operaciones CRUD

    como veras se ingresa el id y al presionar enter se lanza la busqueda que carga los demas campos

    saludos

    ResponderEliminar
  52. Hola de nuevo Leandro !!

    Gracias Por tu Ayuda Pero soy Nuevo en este Tema y No Se Muchas Cosas, No Tendras Un Ejemplo Mas Especifio??

    La Idea es Hacer Un Recibo En El Cual Se Tiene Unos Campos Donde Van Claves Y Al Seleccionar Una Clave del ComboBox y En Un TextBox Arroje El Servicio Que Corresponde a La Clave, Como Te Digo Soy Nuevo En El Tema !!

    Si Pudieras Ayudarme Te Lo Agradecería Mucho !!

    ResponderEliminar
  53. hola Karlos

    entiendo lo que planteas pero no tengo ningun ejemplo armado de con una logica como esta

    quizas el mas parecido sea

    [WinForms] ComboBox Anidados

    en tu caso el ejemplo parte con el ultimo combo que cargaria los datos del form

    saludos

    ResponderEliminar
  54. Hola de nuevo Leandro !!

    Gracias por tu aporte, me ayudo bastante. Logre arreglar mi problema

    Ahora solo tengo una pequeña duda, no tendras un tutorial para realizar impresiones de los recibos o algun ejemplo de como hacerlo??

    Te agradeceria mucho si pudieras Volverme a Ayudar !!

    De ante mano Muchas Gracias !!

    ResponderEliminar
  55. hola Karlos

    se me ocurre que podrias realizarlos mediante el uso de Crystal Reports o Reporting Service

    digo para tener un diseñador para confeccionar el recibo

    saludos

    ResponderEliminar
  56. Hola de nuevo leandro !!

    disculpa la molestia de nuevo, solo para preguntarte si tienes alguna idea de como hacer la funcion de hotmail en un prooyecto realizado en c#

    me explico, lo que quiero es que al verificar si se encuentra el registro y si es asi al mostrarlo en un datgrid darle click y te mande a otro formulario pero al mismo tiempo que cargue la informacion de ese paciente solamente !!


    de antemano gracias por tu ayuda !

    ResponderEliminar
  57. hola Karlos

    no se si entendi, seria como el buscar de este ejemplo

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion - parte 1

    que abre un form de busqueda de la entidad para seleccionar una existente

    saludos

    ResponderEliminar
  58. hola leandro tu ejemplo de autocompletar el textbox me funciona muy la converti a aplicacion de visual studio 2010 y funciono, el problema es al utilizar el mismo codigo en una aplicacion nueva no funciona desde luego cambie toda la conecion a la base de datos, hay algunos atributos o propiedades para añadir en las nuevas versiones

    ResponderEliminar
  59. hola mauricio

    en principio no debria haber nada diferentes

    podrias poner breakpoint en el codigo para evaluar si el metodo que carga el AutoCompleteCustomSource devuelve registros de forma correcta

    valida tambien que devuelvas un AutoCompleteStringCollection, tiene que ser de este tipo

    saludos

    ResponderEliminar
  60. gracias leandro me sirvio de mucho establecer los puntos de interrupcion ya encontre el error gracias

    ResponderEliminar
  61. leandro mil gracias por todos sus aportes a la comunidad y al la programacion

    una pregunta mas como se podria manejar un formulario que me permitiera buscar una imagen visualizarla en el y amacenar solo la ruta de esta imagen en una base de datos de tal modo que al realizar una consulta se me carge esta imagen gracias he buscado por varios sitios y no he hallado respuesta creo que es un poco complejo pero no se encuetran ejemplos de esto en la web gracias

    saludos

    ResponderEliminar
  62. hola mauricio

    aqui se responde el mismo tema

    http://social.msdn.microsoft.com/Forums/es-MX/vbes/thread/60192e4e-09e3-47b7-b47b-0cf837bc1bf0

    creo que podria ser util lo alli comentado

    saludos

    ResponderEliminar
  63. Hola Leandro gracias por el aporte una última pregunta donde puedo.encontrar validación de menú dependiendo de el usuario gracias con esto terminó un gran proyecto

    ResponderEliminar
  64. hola mauricio

    no entendi, valudacion de menu ?

    te refieres a segun el usuario que se autentica se definan las opcioens del menu a las que tiene acceso

    http://www.simple-talk.com/dotnet/windows-forms/controls-based-security-in-a-windows-forms-application/

    podrias crear algo como lo reflejado en el articulo, quizas con algunas modificacioens epro como veras se definen usuario roles, y despues paginas o contoles a los que se tiene acceso, recuperando la info de la db pdorias armar un menu dinamico en base a esa data

    saludos

    ResponderEliminar
  65. Gracias Leandro muy buenos aportes gracias por todos las ayudas

    ResponderEliminar
  66. Hola Leandro, muy util tu blog y permitime robarte lo que subiste, te hago una consulta, hay que agregar alguna dll?, estoy con el VS2010 y no me reconoce el DataHelpers.

    ResponderEliminar
  67. hola Jose

    El datahelper es solo una clase que esta alli mismo en el proyecto de ejemplo que descargas, pero eso debes implementarlo tu mismo dependiendo de donde tomes la info que cargas para el autocomplete

    en principio no se necesita ninguna dll

    saludos

    ResponderEliminar
  68. Hola Leandro, tu ejemplo sirve para WebForm?. En todo caso como podria implemetar algo similar para WebForm c#.
    Gracias desde ya...

    ResponderEliminar
  69. Leandro yo lo estoy ejecutando de la siguiente manera usando mysql pero no se que funcion cumple el DataHelper o como lo puedo usar con c# y mysql

    MySqlCommand LlenarComboProd = new MySqlCommand();
    LlenarComboProd.Connection = ClaseConectarme.Coneccion;
    LlenarComboProd.CommandType = CommandType.Text;
    LlenarComboProd.CommandText = "select Ref1, Nombre, Venta, Costo, Iva from producto where Estado=?est and Empresa=?emp order by(Nombre)";
    LlenarComboProd.Parameters.AddWithValue("est", "A");
    LlenarComboProd.Parameters.AddWithValue("emp", ClaseEmpresa.Nit);
    MySqlDataAdapter da2 = new MySqlDataAdapter(LlenarComboProd);
    DataTable dt2 = new DataTable();
    da2.Fill(dt2);
    Producto.DisplayMember = "Nombre";
    Producto.ValueMember = "Ref1";
    Producto.DataSource = dt2;
    Producto.AutoCompleteCustomSource = DataHelper.LoadAutoComplete();
    Producto.AutoCompleteMode = AutoCompleteMode.Suggest;
    Producto.AutoCompleteSource = AutoCompleteSource.CustomSource;

    ResponderEliminar
  70. hola

    estas seguro que para los filtros que asignas hay datos? que pasa si solo usas:

    select Ref1, Nombre, Venta, Costo, Iva from producto

    muestra opciones el autocomplete en este caso ?

    saludos

    ResponderEliminar
  71. hola leandro!! quisiera saber como puedo implementar ese codigo pero para obtener los datos de una base de datos creada con db4o?? disculpa la molestia :)

    ResponderEliminar
  72. hola blankis

    pero esa que mencinas es una base de datos orientada a objetos

    alli no se aplican queries de sql para tomar los datos
    quizas puedas usar linq para recuperar la info de esa db

    http://refcardz.dzone.com/refcardz/getting-started-db4o

    saludos

    ResponderEliminar
  73. excelente blog.... se te agredece mil

    ResponderEliminar
  74. Buenas tardes.. Estoy trabajando con C# pero en windows mobile, lo que se quiere hacer desabilitar el autocompletado de los TextBox; hay manera de que me pueda ayudar porfavor..

    Gracias..
    Miguel Vicente Vargas

    ResponderEliminar
  75. hola Miguel

    por mobile te refieres a Windows Phone?

    saludos

    ResponderEliminar
  76. una consulta leandro tengo dos tablas el uno es tipo cliente y el otro cliente....
    yo desde mi combobox llamo los datos de la tabla tipocliente (idtipo int ,tipo nvarchar(15)) y me muestra el tipo que es con displaymember y valuemember ... pero quiero insertar lo que muestra en el combobox que me muestra el tipo... pero en la tabla cliente y tipo cliente se relacionan con idtipo... como haria para insertar .. pero he puesto uno de tus ejemplos pero me sale error cmd.Parameters.AddwithValue("@cod_tipo",CInt(CBtipocliente.SelectedValue))

    ResponderEliminar
  77. por fin vi cual era el error leandro gracias

    ResponderEliminar
  78. Hola Leandro. Como estas?. Si la consulta que estoy haciendo en el autocomplete devuelve muchos registros, me conviene o no?

    ResponderEliminar
  79. hola Yoselin

    en ese caso depende, recuerdo que algunos sitios web para aplicar el autocomplete lo que hacen es solicitar como minimo 2 o 3 caracteres y alli recien lanzar la busqueda para mostrar el listado

    con esto te aseguras que la lista no sera tan grande

    no se si en este caso se puede aplicar, quizas el autocomplete standar del textbox, no sea la adecuada, porque este requiere que la lista se cargue completa, habia que ver alguna otra implementacion que realice la busqueda a medida que se escribe

    saludos

    ResponderEliminar
  80. Hola Leandro. Muchas gracias por la ayuda que nos brindas. quisiera saber si me podrias orientar..

    Quisiera tener un control donde pueda escribir para realizar una busqueda ya sea texto (el nombre del producto) o numerico(su clave) pero todo en el mismo control. no se si podria ser en un text box pero aparte que me desplegara un listado de las opciones como un combobox.

    Ojala me haya podido explicar.

    muchas gracias..

    ResponderEliminar
  81. hola Mauricio

    el tema es que el textbox solo te va a dejar buscar por un solo item, o es por el nombre o es por el numero, por ambos no

    quizas podrias poner algun radiobutton en donde el usuario seleccione por cual quiere buscar, entonces cargas ls busqueda en base a esa seleccion

    saludos

    ResponderEliminar
  82. Muchísimas Gracias Leandro, tú siempre ayudando en cualquier situacion de programacion, algo como esto exactamente estaba buscando,muchas gracias de nuevo

    ResponderEliminar
  83. HOLA LEANDRO.NO SOY EXPERTO EN EXCEL PERO ME DEFIENDO UN POCO....TENGO UN FORMULARIO CON DOS COMBOBOX (1-2) Y DOS TEXTBOX AMBOS DEPENDEN DEL COMBOBOX 2, CUAL SERIA EL CODIGO DE AUTOCOMPLETAR SI AL LLAMAR EL LISTADO DEL COMBOBOX 2 TENGO DATOS COMPUESTO,YO LOS TENGO SEPARADOS POR / Y QUE AL BUSCAR EL SEGUNDO NOMBRE EN AUTOCOMPLETAR ME DE LOS VALORES DE LOS TEXTBOS
    Ej: EL COMBOBOX 1 EL LISTADO ES:
    SONY
    ALCATEL
    SAMSUNG

    EL COMBOBOX 2, ESTE SGTE LISTADO DEPENDE DE SONY :
    W1100/W205
    Z760/MIRO/TIPO
    SLAIDER W500/SLAIDER W580

    Y QUE AL BUSCAR Ej: W205 ME DE LOS VALORES DE LOS TEXTBOS

    LOS CODIGOS QUE TENGO DE ESTE FORMULARIO Y QUE ESTOY UTILIZANDO SON ESTOS:
    Private Sub BORRAR1_Click()
    ComboBox1 = Empty
    ComboBox4 = Empty
    TextBox1 = Empty
    TextBox2 = Empty
    End Sub

    Private Sub ComboBox1_Change()
    ComboBox4.Clear
    indice = ComboBox1.ListIndex + 9
    Cells(2, indice).Select
    Do While ActiveCell.Value <> ""
    ComboBox4.AddItem ActiveCell
    ActiveCell.Offset(1, 0).Select
    Loop
    End Sub



    Private Sub UserForm_Initialize()
    ComboBox1.Clear
    Me.StartUpPosition = 0
    Me.Left = 0
    Me.Top = 0
    Dim nombre As String
    Dim rango

    rango = sheets.Count

    For i = 1 To rango
    Range("i1").Select
    nombre = sheets(i).Name
    Next

    Do While ActiveCell.Value <> ""
    ComboBox1.AddItem ActiveCell
    ActiveCell.Offset(0, 1).Select

    Loop


    End Sub

    Private Sub ComboBox4_Change()
    On Error GoTo MANEJOERROR
    TextBox1.Value = Application.VLookup(Me.ComboBox4.Value, Range("b3:d110"), 2, 0)
    TextBox2.Value = Application.VLookup(Me.ComboBox4.Value, Range("b3: d110"), 3, 0)
    TextBox2 = Format(Val(TextBox2), "$ #,##0")
    Exit Sub
    MANEJOERROR:
    MsgBox "BORRAR", VBEXCLAMTION, "ACTUALIZAR"

    End Sub

    LE AGRADESCO DE ANTEMANO LA AYUDA Q ME PUEDA BRINDAR

    ResponderEliminar
  84. hola Rodrigo

    me temo que el autocomplete que proporciona .net no cubre lo que buscas implementar

    el autocomplete solo busca desde el principio de la cadena y no de otro lugar o con texto compuesto o utilizando separadores

    si escribes W11 este listara los item que empiecen con ese texto, pero solo lo hara cuando empiede no buscara desde otro lugar

    salvo que utilices algun textbox de terceros que implemente su propio autocomplete custom

    saludos

    ResponderEliminar
  85. hola leandro..como te comente inicialmente entiendo poco de excel..y te agradesco por tu colaboracion rapida con tu respuesta..me deja un poco desubicado , tu me comentas que una soluccion seria hacer un textbox de tecero;segun tu criterio y con los codigos q tengo montados..como seria la forma de implementar ese textbox...gracias

    ResponderEliminar
  86. leandro me falto comentarte que estoy manejando excel 2010 ,lo que no se decirte si es vba.net...y las planillas que manejo en varia hojas son del excel 2010..hombre leandro, en que forma tu puedes orientarme a que pueda utilizar un autocompletar; porque el listado que manejo en el combobox4 son compactibles entre si siempre que esten separados por el / ,y me urge manejarlo con cualquiera de los nombres, gracias por tu colaboracion

    ResponderEliminar
  87. hola Rodrigo

    cuando comente lo de textbox de terceros no apuntaba a desarrollarlo sino a buscar o comprar un componente que implemente alguna funcionalidad de autocomplete mas avanzada

    por lo que planteas el utocomplete basico que planeas .net no alcanza, deberias buscar otro tipo de busqueda, quizas algun popup,o sea que se abra un forma en dodne tentas algun textbox y grid en donde al escribir en el textbox puedas buscar en cualquier parte del campo de los datos que dispones y se listen para luego seleccionar el dato concreto y retornarlo al forma inicial

    pero esto ya no seria un autocomplete sino un forma de busqueda avanzada

    algo similar al boton de "buscar" de aqui
    [N-Tier] – Desarrollo en capas - Ejemplo Facturación – Parte 1

    que desplega una nueva ventana para poder seleccionar
    saludos

    ResponderEliminar
  88. hola leandro....mil gracias por saber que cuento contigo...sigo todavia con mi ignoracia sobre excel y me disculpas...cundo tu me dices que buscar o comprar, es sobre un vba mas avanzado ? y que me de la posibilidad de implementar la busqueda del autocompletar del combobox ,si es asi...me da todavia la posibilidad de saber que si podre ejecutar el formulario como deseo hacerlo....gracias

    ResponderEliminar
  89. hola Rodrigo

    en realidad excel lo imaginaba como una base de datos comun ya que si usa ado.net para acceder al excel puedas trabjarlo con queries de sql para recuperar los datos

    si es asi utilizarlo en un autocomplete no es diferente a cualquier otra db

    lo que planteo es que el autocomplete que plantea los controles del VS estan limitados, por eso buscar alternativas con componente de terceros, otras companias que desarrollan controles y comprarlos, o ver de aplicar la busqueda en una ventana como el del articulo que propuse
    eso no seria un autocomplete pero si te dejaria implementar una busqueda avanzada que podrias adaptar como lo necesites

    saludos

    ResponderEliminar
  90. hola leandro...gracias por tu ayuda y disculpa que te siga molestando..segun usted..cual me recomiendas...y que segun mis pocos conocimientos de excel me pueda mover facilmente...gracias

    ResponderEliminar
  91. Estimado Maestro Leandro!.

    Estoy intentando hacer algo parecido, que dado un textbox y un listbox, yo sea capas de filtrar la búsqueda y me muestre los registros en el listbox! Los cuales son buscados en una BD SQLServer Llamada "Generos" y si dicha búsqueda retorna coincidencias de forma simultanea :
    Esto es lo que he intentado:

    FORM GEneros:
    http://sia1.subirimagenes.net/img/2013/09/19/130919094130127444.png

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    SqlConnection cn = new SqlConnection(@"Data Source = RICHARD-PC; Initial Catalog = Generos; Integrated Security = true");
    cn.Open();
    string cadena = string.Format("SELECT * FROM Generos WHERE (_NombreGenero LIKE '" + textBox1.Text + "')");

    SqlCommand cm = new SqlCommand(cadena, cn);
    //cm.Parameters.AddWithValue("@textBox1", textBox1.Text);
    SqlDataAdapter Reader = new SqlDataAdapter(cm);
    DataSet data = new DataSet();
    Reader.Fill(data);

    listBox1.DisplayMember = "_NombreGenero";
    listBox1.DataSource = data.Tables[0];

    }
    Codigo:
    http://sia1.subirimagenes.net/img/2013/09/19/130919094317751842.png

    Ahora no he logrado los resultados positivos. y nosé como lograrlo! ojala puedas ayudarme. no se si tendre que usar un ciclo , try catch, un while pls me urge . gracias!

    ResponderEliminar
  92. hola rimesoft

    y si usas

    string cadena = "SELECT * FROM Generos WHERE _NombreGenero LIKE '%'+ @param +'%'";
    SqlCommand cm = new SqlCommand(cadena, cn);
    cm.Parameters.AddWithValue("@param", textBox1.Text);

    SqlDataAdapter Reader = new SqlDataAdapter(cm);

    alli buscas en cualqueir parte del texto sino puedes quitar un '%' para buscar al principio o al final las coincidencias

    saludos

    ResponderEliminar
  93. Gracias ya lo logre! , ahora mi duda es cuando por ejemplo de 1000 coincidencias y mi palabra a buscar tiene 20 caracteres. Como hago para que al hacer click en el listbox se copie en el textbox!? con esto termino, gracias

    ResponderEliminar
  94. hola rimesoft

    podrias usar el evento SelectedIndexChanged del listbox y alli usar

    textbox1.Text = Convert.ToString(listbox1.SelectedText)


    saludos

    ResponderEliminar
  95. Gracias Leandro, me fuí muy útil. Lo implementé con un modelo 3 capas y sin problemas.

    Gracias de Nuevo.

    ResponderEliminar
  96. Gracias.. Lo implementé en un proyecto por capas y funciona igual.

    De nuevo gracias.

    ResponderEliminar
  97. buenas noches leandro, tengo una consulta por dias he querido crear un codigo en el cual tengo 2 textbox en el primero escribo el nombre del usuario y en el segundo quiero que al escribir la primer letra del nombre me aparesca en un autocompletable en el textbox2 sugerencias de id de usuarios por ejemplo nombre completo text1: mario barahona gutierrez almendarez, text2 quiero que aparezca asi forma de lista autocompletable: mario.9659, otra linea donde aparesca barahona.4568, y asi sucesivamente varias combinaciones con el nombre o solo la primer letra por ejemplo m.mario865 o m.barahona1245 y asi sucesivamente, todo esto quiero sacarlo del nombre sin conexion a base de datos, el programa que uso es visual basic

    ResponderEliminar
  98. hola Kelvin

    no veo que la funcionalidad de autocomplete pueda resolver el problema que planteas, la implementacion del autocomplete que incluye .net es mucho ams simple

    igual lo que no entendi es sino es de una db de donde obtendrias esta informacion para mostrar en el control

    saludos

    ResponderEliminar
  99. Hola Leandro, me parese que es lo que estoy buscando solo que tengo problemas con el codigo del modulo DataHelper me aparese un error en la parte de CONFIGURATIONMANAGER


    Dim connectionstring As String = ConfigurationManager.ConnectionStrings("default").ConnectionString

    el error me dice que no esta declarado y que puede ser inaccesible debido a su novel de proteccion, espero me puedas ayudar, SALUDOS Y GRACIAS

    ResponderEliminar
  100. hola Rimazk

    tienes que agregar la referencia a System.Configuration

    con esa referencia y el

    using System.Configuration;

    podrias utilizar la clase ConfigurationManager

    saludos

    ResponderEliminar
  101. Hola,
    Antes que nada queria saludarlo por estas fiestas deseando que todo le vaya bien.
    Al tema existe una forma de implementar esto en una Librería de Clases?, pasa que todas las transacciones con la base de datos la hago en una librería por eso de las 3 capas. Pero me encuentro con el error de que al parecer la clase AutoCompleteStringCollection está heredada del espacio de nombres Windows.forms, y es en esencia para los formularios.
    En este caso como sería posible poder usar el AutoCompleteStringCollection en un proyecto de 3 capas?... sin afectar la seguridad que te ofrece ésta.
    Estaba viendo hacerlo con un módulo como usted lo hace, sin embargo esto no afectaría a la estructura de 3 capas?...

    ResponderEliminar
  102. hola Leandro, se puede hacer algo como esto con el autocomplete
    Si escribo 'st' se filtre el combo con las palabras que tengan coincidencias con la cadena ingresada

    AUSTRALIA
    AUSTRIA
    ST KITTS
    ST LUCIA
    UNITED STATES

    ResponderEliminar
  103. hola

    no se puede implementar lo que planteas con la funcionalidad estandar del autocomplete de .net

    Multivalue AutoComplete WinForms TextBox for tagging

    alli hay una implementacion custom del autocomplete, quizas se podria tomar alguna idea he implementar algo especial para que busque en diferentes partes del string

    saludos

    ResponderEliminar
  104. hola Miguel

    es que AutoCompleteStringCollection lo usas siempre desde la capa de presentacion

    o sea la capa de negocio y datos le otorgara a la UI los items que debe presentar en un objeto del dominio de la aplicacion, es en codigo de la UI donde realizas la conversion a este tipo de coleccion

    o sea el negocio no tiene porque devolver un AutoCompleteStringCollection porque no es responsabilidad de el adaptar al tipo que requiere la ui para presentar los valores

    recuerda que la UI no tiene porque mostrar asi como le viene del negocio, puede tener codigo y reglas que validen o conviertan de tipos para adaptar los datos a la presentacion

    saludos

    ResponderEliminar
  105. Hola sr Leandro, disculpa mi ignorancia, en el llamado a la función LoadAutoComplete(); que significa DataHelper? Mi segunda pregunta es, en el LoadDataTable(); es una función que contiene los datos de conexión y consulta para devolver otro DataTable? Así es que funciona? Gracias de antemano, me gusta muchísimo tu blog, un saludo.

    ResponderEliminar
  106. hola hackers13

    DataHelper es solo el nombre que le di a la clase que implementara la funcionalidad que ayude en la obtencion de los datos, pero si usas capas podria ser las clases de acceso a datos
    en realidad en esa clase se cumplen dos funciones, una es la de acceder a la db y la otra de transformar los datos para adaptarlos a tipo que requiere el autocomplete

    en el metodo LoadDataTable() alli me estoy conectando a la db para recuperar la info, pero nuevamente, si tienes una capa de acceso a datos puedes utilizarla

    recuerda que este es un ejemplo simple que solo refleja el autocomplete, la forma en como accedes a los datos puedes cambiarla

    saludos

    ResponderEliminar
  107. Holaaaa mi estimado Leandro, antemano agraceder por ayudarnos a darnos una idea a nosotros los programadores.
    Mi consulta es la siguiente implemente mi autocomplete combobox pero quisiera que al momento de escribir una palabra
    Ejm: Pe
    -Peru
    -Polonia
    al escribir pe se autoseleccione y presione enter y se complete en su totalidad.
    Saludos!!!

    ResponderEliminar
  108. hola Russell

    no se si el autocomplete tenga esta funcionalidad

    aunque tengo una duda, cuando escribes no se desplaga la lista, cuando lo hace si te mueves con los botones de flechas del teclado no te deja seleccionar una opcion y si alli presionas enter no la selecciona?

    el autocomplete muestra una lista de opciones deberia estar marcada una para que la selecione, directo con enter no veo como podria seleccionarla sino hay una seleccionada

    saludos

    ResponderEliminar
  109. Hola leandro antemano agradecerte por la respuesta a mi consulta.
    Te comento cuando selecciono con las flechas si me permite seleccionar con total normalidad todo el contenido de la palabra y logicamente ya se completa todo.
    Estoy tratando de darle el punto ahi al autocomplete si lo logro te estare comentando y compartiendo.
    Lo que en realidad me referia que por incidencia pueda seleccionar 1 ejm:
    Si pongo Per: ya de por si seleccione Peru.
    si pongo Perm: seleccion permano algo asi no es la idea.

    ResponderEliminar
  110. Hola Leandro,

    lo primero agradecerte tu esfuerzo, nos ayudas a muchos.

    Tengo un problema con AutoComplete en un TextBox. La cuestión es que a veces se queda permanente el elemento elegido de la lista que despliega el ac. Y al salir de la pantalla correspondiente o al cambiar el foco, este elemento no desaparece.
    He visto que cuando se oculta la lista ac, el textbox asociado tiene SelectedIndex = -1. Pero cuando no se queda fijo textbox.SelectedIndex es 0. Intento cambiarlo en código a -1, pero sigue sin ocultarse ese elemento.
    Todo esto se produce cuando en la lista ac solo hay un elemento y hago click con el ratón. Entonces ese elemento se queda fijo.

    Gracias por tu ayuda.
    Un saludo

    ResponderEliminar
  111. hola Guti

    pero es un textbox o un combobox el que usas con el autocomplete?
    lo pregunto porque un textbox no tiene ninguna propiedad SelectedIndex

    si es un combo el -1 indica que no hay seleccion que coincide con algun item del combo, si del autocomplete no se marco alguna coincidencia valida seguro va a seguir en esa opcion -1 hasta que un item del autocomplete coincida con alguno del combo y reconozca el cambio

    saludos

    ResponderEliminar
  112. Efectivamente, lo he explicado mal. Quien tiene la propiedad SelectedIndex es la lista AutoComplete.

    Cuando voy escribiendo en el textBox, la lista ac va mostrando los elementos coincidentes. Pero cuando queda un solo elemento en esa lista y pincho encima con el ratón, ese elemento queda fijo en la pantalla. La lista ac no se oculta.
    Ese es mi problema.

    Gracias

    ResponderEliminar
  113. Hola
    Muy bueno el ejemplo la verdad que me sirve muchísimo, el único problema que no puedo arreglar es modificar el tamaño de la lista ya que el texto a mostrar es mas largo que el textbox que uso.

    Saludos

    ResponderEliminar
  114. Leandro buenos dias:

    Quiza no tenga mucho que ver con el tema de automplete, pero me gustaria saber como puedo quitar la primer letra de un textbox.. por ejemplo si se escribe la palabra "hola" que solo ponga "ola", gracias por tu ayuda.

    ResponderEliminar
  115. hola Eduard

    podrias hacer

    textbox1.Text = textbox1.Text.Substring(2)

    saludos

    ResponderEliminar
  116. Excelente como siempre, gracias por tu ayuda funciono de maravilla, por cierto tengo otro problema un poco mas complejo lo coloque en el sitio de microsoft pero aun no tengo ayuda, si tienes tiempo por aqui te dejo el Link http://social.msdn.microsoft.com/Forums/es-ES/e45d0cb7-ddae-4110-bb36-e783c6d72b76/actualizar-tabla-dependiendo-si-el-checkbox-esta-seleccionado?forum=vcses#e45d0cb7-ddae-4110-bb36-e783c6d72b76

    ResponderEliminar
  117. hola Eduard

    respondi en el foro

    saludos

    ResponderEliminar
  118. Buenos dias.
    Cordial saludo.
    Quisiera saber si existe la posibilidad de que el Autocomplete de Ajax tool kit, me busque las coincidencias dentro del mismo textbox, es decir que no me lleve la busqueda al list, si no mientras escribo se prediga en el mismo textbox.
    Muchas
    gracias

    ResponderEliminar
  119. hola Orlando

    con la funcionalidad de ajax toolkit no vas a poder hacerlo porque este ya implementa un desplegable para mostrar las coincidencias

    quizas algun plugin de jquery lo implemente, peor no sabria decirte cual, los que veo todos muestran desplegable

    saludos

    ResponderEliminar
  120. Muchas gracias amigo Leandro , Investigaré el tema.

    ResponderEliminar
  121. Hola Leandro. Agradeciendo de sobremanera por tu ayuda en muchas ocasiones, el combobox me aproblema respecto a que no logro desplegar valores únicos en él. Parece ser algo muy simple, pero no he hallado solución.

    ResponderEliminar
  122. hola

    no entendi lo de valores unicos en el combo
    no sera un problema con los datos que asignas al autocomplete?
    quizas estos estan duplicados por eso aparecen repetidos

    saludos

    ResponderEliminar
  123. Gracias por tu respuesta. Selecciono los datos de tabla1, que contiene los campos "título" y "año". Deseo que me aparezca el año de cada título, pero como un global, sin repetir el año de cada título si éste ya está incluido.

    Esperando haberme dado a entender

    ResponderEliminar
  124. hola

    tabla1 es un datatable ? o de que tipo de objeto se trata

    porque podrias ver de crear un campo calculado que una la info del titulo y el año devolviendo esa union como resultado
    usarias usa propiedad en el autocomplete

    con el datatable se pueden crear campos calculados que unan la info de otros dos campos

    tambien podrias realizar la union en el SELECT

    saldos

    ResponderEliminar
  125. hola leandro creo q este tema ya es algo viejo pero si me esta dando dolores de cabeza... cuando intento recorrer la tabla no me permite y me agrega solo el ultimo registro de esta .. al depurar me dice esto Item = Para evaluar una propiedad indizada, ésta debe estar certificada y el usuario debe proporcionar explícitamente los argumentos. y la verdad no tengo idea gracias de antemano

    ResponderEliminar
  126. Leandro...mira hago esto:

    txtrazon.AutoCompleteSource = AutoCompleteSource.CustomSource;
    txtrazon.AutoCompleteMode = AutoCompleteMode.Suggest;
    AutoCompleteStringCollection col = new AutoCompleteStringCollection();


    NEGOCIO.samaepro objMaePro = new NEGOCIO.samaepro();
    DataSet dts = objMaePro.ObtenerPorNombre(txtrazon.text);
    foreach (DataRow row in dts.Tables[0].Rows)
    {
    col.Add(Convert.ToString(row["sanombre"]));
    } txtrazon.AutoCompleteCustomSource = col;

    Lo hace bien pero no me carga toda la busqueda completa..me carga algunos datos..en mi consulta hago un select... like , cuando hago un paso a paso se ve q los carga todos perfactamente pero cuando toka verlo en el form solo se ven algunos...q puede ser??

    ResponderEliminar
  127. hola Juan Antonio

    lo que no entendi es a que tabla haces referencia, es un datatable?

    estas creando una clase propia que quieras cargar con los datos que provienen de una consulta a la db

    saludos

    ResponderEliminar
  128. hola Carlos

    el tema es que el autocomplete que utiliza winforms no quiere que realices un like sino que cargues absolutamente todos los datos

    sera el propio form luego quien filtre

    intenta hacer
    DataSet dts = objMaePro.ObtenerPorNombre();

    sin filtrar por nada y veras como el autocomplete funciona correctamente

    si quieres algo que filtre a pedido con el like vas a tener que usar algun autocomplete en un componente de terceros porque el que incorpora .net no trabaja de esa forma

    saludos

    ResponderEliminar
  129. hola leandro un saludo desde peru tengo un problema con AutoComplete
    de un textbox la tecla enter , en evento KeyPress

    private void txtBuscar_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (e.KeyChar == 13)
    {
    if (!txtBuscar.AcceptsReturn)
    {
    btnBuscar.PerformClick();
    }

    }
    }

    pero no me toma la accion me puedes ayudar.

    ResponderEliminar
  130. hola Saavedra

    pero tienes el foco en el boton cuando presionas enter?

    ademas si defines el boton como
    AcceptButton

    no tienes que definir ningun keypress para detectar el enter, lo hara automaticamente

    saludos

    ResponderEliminar
  131. hola William

    exacto solo funciona una sola vez porque busca desde el inicio del texto ingresado

    saludos

    ResponderEliminar
  132. hola William

    con el autocomplete estandar que proveen los controles de .net esto no se puede lograr

    el autoomplete solo busca por una unica palabra

    saludos

    ResponderEliminar
  133. Hola Leandro,

    Mira tengo un problema algo parecido, lo que sucede es de que al momento de que presiono una tecla dentro de mi ComboBox debería colocarse como si fuera mi primer Item , Ej:
    Tengo:
    *Azúcar
    *Harina Refinada
    *Harina Integral
    *Polvo de Hor.
    *Polvo etc

    Si yo presiono la Tecla "H" debería ponerse en primera posición mi item Harina Refinada para poder ver los demás items que comienzan con"H", no se si me dejo entender?.
    Me ayudarías demasiado con esa respuesta, muchas gracias de ante mano.

    ResponderEliminar
  134. hola Alexis

    y es asi como funciona si el usuario escribe la H deberia mostrar los items que comienzan con esta letra

    ahora una duda, ese *(asterico) que has puesto, es parte del texto? porque sino el comienzo seria el * y no la H

    saludos

    ResponderEliminar
  135. Hola Leandro,

    No los asteriscos no tienen nada que ver, solo fue de ejemplo.

    Claro como dices tu mismo es así como trabaja el ComboBox, pero se posiciona en la primera palabra que encuentra y si esta en la parte inferior se queda en esa posición, lo que yo necesito es de que si encuentra una palabra por ejemplo "H" lo posicione en la parte superior, no se si se podrá realizar eso?

    ResponderEliminar
  136. hola Alexis

    pero hasta donde se el autocomplete no se posiciona en ningun item que desplega, no sera que el puntero del mouse esta posicionando la seleccion

    analiza las imagenes del articulo

    A Guide to Programming AutoComplete

    veras que el cursor es quien determina la seleccion, quizas en tu caso el cursor quedo a un nivel que marca el ultimo item de la lista

    saludos

    ResponderEliminar
  137. hola William

    la verdad nunca lo habia evaluado pero si se puede

    Autocomplete Menu

    saludos

    ResponderEliminar
  138. Hola Leandro, muy bueno tu articulo y tu blog en general. Estoy haciendo algo muy parecido a lo que sugieres en este articulo, pero tengo una duda, hay alguna posibilidad de que el Autocomplete me proporcione la manera de que los datos cargados aparezcan orden alfabeticamente, es decir en el caso de que fueran nombres y yo teclee:
    letra L,
    teniendo los resultados: Leandro, Lionel, Laura me salga ordenados alfabeticamente.
    Muchas gracias de antemano y saludos desde La Habana

    ResponderEliminar
  139. hola pablo

    podrias ordenar la query que usas para recuperar los registros que usaste para generar la lista del autocomplete

    si la lista de proporcionas del autocomplete esta ordenada deberia aprecer de la misma forma cuando desplega

    saludos

    ResponderEliminar
  140. Hola Leandro gracias por el aporte pero tengo unas dudas con el código.

    estoy trabajando con Visual Studio 2010 y me lanza una excepción. tal vez sea demasiado texto de excepcion.

    System.Threading.ThreadStateException was unhandled
    HResult=-2146233056
    Message=El subproceso actual debe establecerse en el modo de subprocesamiento controlado simple (Single Thread Apartment, STA) para poder realizar llamadas OLE. Asegúrese de que la función Main tiene marcado STAThreadAttribute.
    Source=System.Windows.Forms
    StackTrace:
    en System.Windows.Forms.ComboBox.set_AutoCompleteMode(AutoCompleteMode value)
    en Ventas_Jaiser.View.Registrar_Venta.Registrar_Venta_Load(Object sender, EventArgs e) en D:\10 semestre\DesarrolloChavez - copia (2)\Jaiser_Alpha\Codigo\Ventas_Jaiser\View\Registrar_Venta.cs:línea 41
    en System.Windows.Forms.Form.OnLoad(EventArgs e)
    en System.Windows.Forms.Form.OnCreateControl()
    en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    en System.Windows.Forms.Control.CreateControl()
    en System.Windows.Forms.Control.WmShowWindow(Message& m)
    en System.Windows.Forms.Control.WndProc(Message& m)
    en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    en System.Windows.Forms.ContainerControl.WndProc(Message& m)
    en System.Windows.Forms.Form.WmShowWindow(Message& m)
    en System.Windows.Forms.Form.WndProc(Message& m)
    en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    InnerException:

    Gracias por leerme

    ResponderEliminar
  141. hola Jonathan

    pero estas quizas lanzando un thread (hilo) para realizar la busqueda del autocomplete

    podrias validar que el Main tenga el atributo [STAThread] como se ven en la

    imagen

    saludos

    ResponderEliminar
  142. Hola amigo, espero que te encuentres muy bien.. Pasando a otro tema quisiera de favor asesorarme con la siguiente problematica!!
    tengo un dropDownList(DDL) y lo quiero cargar desde un el evento SelectionChanged de un gridview mismo que consulta de una base de datos en mysq, el problema es que tengo un id y es mismo quiero que cargue en el DDL!! ya usé la propiedad valuemember pero no lo respeta... Aquí te dejo mi código:

    if (rgv_Presupuesto.SelectedRows.Count > 0)
    {
    sped_NoOA.Value = Convert.ToInt32((rgv_Presupuesto.Rows[0].Cells["NUMERO"].Value.ToString() == string.Empty) ? "0" : rgv_Presupuesto.SelectedRows[0].Cells["NUMERO"].Value.ToString());

    ddl_NoOyA.ValueMember = Convert.ToString(sped_NoOA.Value);
    }

    ResponderEliminar
  143. hola Omar

    que tipo de aplicaicon estas desarrollando ? porque el DropDownList y el GridView son controles de asp.net
    pero el ValueMemeber que mencionas es de un ComboBox de winforms

    ademas que significa esto
    Convert.ToInt32((rgv_Presupuesto.Rows[0].Cells["NUMERO"].Value.ToString() == string.Empty)

    no puedes poner un condicional junto a una conversion de tipo, quizas algo como esto

    string numero = rgv_Presupuesto.SelectedRows[0].Cells["NUMERO"].Value.ToString();

    sped_NoOA.Value = numero == string.Empty ? "0" : Convert.ToInt32(numero);


    saludos

    ResponderEliminar
  144. hola soy nuevo en esto quisiera que me ayudaran

    estoy agregando en una pagina de tabcontrol pero quiero q me edite en una pagina siguiente buscandolo mediante un combobox pero no se actualiza cuando edito osea no me aparece los datos guardatos al momento de editar

    gracias de antemano

    ResponderEliminar
  145. hola soy nuevo en esto quisiera que me ayudaran

    estoy agregando en una pagina de tabcontrol pero quiero q me edite en una pagina siguiente buscandolo mediante un combobox pero no se actualiza cuando edito osea no me aparece los datos guardatos al momento de editar

    gracias de antemano

    ResponderEliminar
  146. Puedes ser un poco mas especifico?

    ResponderEliminar
  147. es que tengo en un tab control 2 paginas una de agregar y otra de editar pero cuando agrego todo normal el problema es cuando quiero editar es un conbobox que me desplega los datos que he guardado solo me aparecen cuando cierro el form y lo vuelvo abrir

    ResponderEliminar
  148. Hola Leandro!, me consulta es:
    al utilizar esta instrucción de autocompletar ya sea en la propiedades o en Form load.
    'ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend

    'ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
    me funciona perfecto, pero es norma que la caja de combobox este trabanjando, osea posiciono el cursor del mouse y me sale que esta cargando como si estubiera trabando

    ResponderEliminar
  149. hola Roberto

    usas el control combobox estandar de winforms o es un control de terceros?

    no se si los items de la busqueda los traes desde una query a una base de datos, quizas esto genere la demora y esa carga que mencionas en el combo

    lo que no mencionas es como asignas el AutoCompleteCustomSource para definir los datos del autocomplete

    saludos

    ResponderEliminar
  150. Leandro Gracias por responder!!
    si mi combobox esta enlazado a un BindingSource...
    yo lo estaba utilizando para mostrar los datos,registros de una tabla access
    tengo un buscador, también botón imprimir, agregar nuevo, modificar, cancelar.
    Yo lo estaba utilizando hasta hace días, sin autocomplentar lo haciamos con el click del mouse en la flechita del combo así nos desplegaba la lista eso nos hacia mas lentos en la carga. hasta que me surgió la necesidad de ayudar a mi compañera que es la carga los datos.
    Utilice el auto completar que no medio problema me funciona bien. pero algo me llama la atención es lo que te mencione: que parece que esta trabajando!! mi caja de combo.

    ResponderEliminar
  151. hola Roberto

    claro la caja tiene que funcionar para que el usuario pueda escribir el texto a buscar sobre los items del autocomplete

    sino habilita la escritura como realizaria el usuario la buesqueda

    saludos

    ResponderEliminar
  152. Cargar una lista desplegable automáticamente, tengo dos listas desplegables con varios datos para escoger, ejemple en la primera lista desplegable escojo el nombre de la empresa y en la otra lista se me deben de cargar solamente los nombres de los trabajadores que pertenecen a esa empresa. Espero su ayuda, saludos!

    ResponderEliminar
  153. Hola Leandro, estoy probando la propiedad AutoCompleteCustomSource, En mi base de datos de clientes tengo unos 3000. El problema que tengo es que tarda mucho en rellenar y me deja la pantalla en espera de que termine el foreach.
    He probado a coger un cobobox y asignarle el origen de datos, y esto no me tarda nada, lo hace al instante, pero si lo realizo así no me deja utilizar la propiedad AutoCompleteCustomSource. Que forma eficiente hay de realizar esto?

    Este es el codigo que realizo para rellenarlo:


    DataTable dataTable = (DataTable)BDWrapper.execute(clientesTableAdapter, "GetData");
    azulejosleyvaDataSet.clientes.Merge(dataTable);
    if ((dataTable != null))
    {
    azulejosleyvaDataSet.clientesRow clienteRowTextBox = null;
    foreach (DataRow row in dataTable.Rows)
    {
    clienteRowTextBox = row as azulejosleyvaDataSet.clientesRow;
    textBoxCliente.AutoCompleteCustomSource.Add(clienteRow.nombre);
    }
    }

    ResponderEliminar
  154. Hola Leandro gracias por tu publicacion, tengon un problema con el onedrive, me sale mensaje de error. una cosa mas sabes como puedo hacer para que autocomplete hacia la derecha y tambien de la opcion de corregir un caracteres intermedio?

    ResponderEliminar
  155. hola Victor

    la verdad esta muy raro lo de onedrive, quizas ea porque en la red desde donde accedes este bloqueado

    respecto al autocomplete, te comento qe estas capacidades que encionas no se pueden implementar, la funcionalidad con la que cuentas es bastante basica, quizas si necesitas algo como esto debas evaluar si controles de terceros la proporcionan

    saludos

    saludos

    ResponderEliminar
  156. Hola Leandro!
    Excelente tu Post, me funciono perfecto.
    Mi problema es el siguiente:
    Necesito verificar que el usuario selecciona un item del combobox o bien lo deja vacio, y que no le permita escribir un item que no este en la BD.

    EL codigo que estoy utilizando para esto es el siguiente

    Private Sub cmbIva1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cmbIva1.SelectionChangeCommitted
    MsgBox(cmbIva1.SelectedIndex)
    If cmbIva1.SelectedIndex = -1 Then

    MsgBox("El numero de cuenta: " & Me.cmbIva1.Text & " no existe en el plan de cuentas, vuelva a intentarlo", MessageBoxButtons.OK)

    Me.cmbIva1.Focus()

    Return

    End If
    End Sub

    El problema es que elija lo que elija el index siempre me vale -1, y no se porque pasa esto.
    Muchas gracias!

    ResponderEliminar
  157. tengo una duda, yo quiero que un combobox, me haga un atocomplete, pero que sustituya el evento que se realiza cuando se da click en la flecha y se despliega la lista de items, ya si doy click en la flecha y escribo en el me salen los item del autocolplete y del evento que se realiza al presionar la flecha,
    este es mi correo
    riddickemilio@gmail.com

    ResponderEliminar
  158. Simplemente agradecerte mucho tu ayuda. Eres genial Leandro.Personas como tú son las que dan ánimos para seguir adelante.

    ResponderEliminar
  159. hola amigo necesito hacer algo similar pero en un web form, podrias ayudarme, mi correo es Christian_sh@hotmail.com

    ResponderEliminar
  160. Buenos dias Leandro una consulta tengo un textbox con un valor fijo y deseo qu elo que se ingrese se siga concatenando.
    Ejm:
    REC- valor fijo
    REC-015116 y que el usuario inrgese el numero pero que sin se borre el (REC-)

    Gracias

    ResponderEliminar
  161. Hola Leandro,

    Tengo un formulario con usuario y contraseña hecho en visual c#, necesito que cuando voy a escribir en el textbox no aparezca algun correo o nombre que ya haya escrito antes en ese textbox. Podrias ayudarme?


    Gracias

    ResponderEliminar
  162. Buenas noches amigos soy nuevo en programacion. ando creando un sistema en vb6.0 y me tope con un problema.

    necesito que al seleccionar el valor de un combo me muestre valores en 3 label. Te anexo mi codigo para que me puedas ayudar por favor.

    Private Sub Combo1_Change()
    If Combo1.Text <> "" Then
    Adodc1.RecordSource = "SELECT [No,RFC,DOMICILIO,ESTADO,RAZON SOCIAL] FROM [CLIENTES]'" & Combo1.Text & " '"
    End If
    End Sub

    Private Sub Form_Load()

    Combo1.Visible = True
    Label1.Visible = True
    Label2.Visible = True
    Label3.Visible = True

    Adodc1.Refresh
    Label1.Refresh
    Label2.Refresh
    Label3.Refresh

    With Adodc1.Recordset
    Do Until .EOF
    Combo1.AddItem ![RAZON SOCIAL]
    .MoveNext
    Loop
    End With
    End Sub

    ResponderEliminar
  163. y si en mi tabla tengo mas de 10.500 filas se me tarda bastante en abrir alguna solución ?

    ResponderEliminar
  164. tengo un formulario para crear un catalogo de cuentas pero quiero repetir un numero sin embargo me sale que ese codigo ya existe como puedo hacer para repetirlo con otro nombre

    ResponderEliminar
  165. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  166. Hola me parece excelente esta funcionalidad, solo q no se como acoplarla a mi proyecto ya q trabajo en cuatro capas, cargo bien el combobox pero no puedo ponerla la función de autocompletar, les agredezco cualquier aporte

    ResponderEliminar