Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   combobox y autocomplete !!!!!!!!!!!!!!!!!! (https://www.clubdelphi.com/foros/showthread.php?t=45949)

david_uh 18-07-2007 23:55:01

combobox y autocomplete !!!!!!!!!!!!!!!!!!
 
tengo un lisbox conla proiedad autocomplete y autodropdown a true.
El usuario escribe y la lista va seleccionando las coincidencias todo bien pero al seleccionarse una y presionar enter la propiedad ItemIndex se pone a -1 o al valor del anterior elemento seleccionado

Deseo conservar el itemindex de la seleccion ¿a que se debe este comportamiento y como podria soluionarlo?

gracias de antemano

ContraVeneno 19-07-2007 00:01:38

Pues se me hace que el problema esta escondido por algún lado, porque a mi me funciona exactamente como mencionas, dejándo el índice del elemento seleccionado al presionar la tecle enter.

:confused::confused:

david_uh 19-07-2007 00:06:11

ok mira pon una listbox con 10 elementos:

amarillo
ambar
ameno

luegon button que muestre el indice del elemeto seleccionado enun showmessage

enel combo escribe am, se va a selleccionar amarillo sin terminar de escribir presiona enter
el button deberia mostrar 0 verdad por que el priemero estaba seleccionado pero muestra -1 es decir el avor anterior
a ver prueba
nota.- tengo delphi 6

ContraVeneno 19-07-2007 00:12:19

tienes razón, al utilizarlo en un evento de botón:

Código Delphi [-]
showmessage(inttostr(combobox1.ItemIndex));
muestra otro valor que no es el seleccionado.

Yo lo estaba probando en el evento onchange del combobox:
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 label1.Caption := inttostr(combobox1.ItemIndex);
end;

El cuál sí me muestra el número correctamente

david_uh 19-07-2007 00:14:25

a ver prueba
este código en el evento keypress del combo
Código Delphi [-]
if key = #13 then  label1.Caption := IntToStr(cbo_Producto.ItemIndex)

ContraVeneno 19-07-2007 00:16:50

Eso tambien me muestra el número correctamente...

roman 19-07-2007 00:16:56

Prueba poniendo esto en el evento OnCloseUp del combo:

Código Delphi [-]
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(ComboBox1.Text);

// Saludos

ContraVeneno 19-07-2007 00:20:26

¿y si simplemente colocas la propiedad Style en "csDropDownList"?

------------Edito:
maese Roman: !

david_uh 19-07-2007 00:22:53

no es lo mismo ya que lo que se requiere es que el user vaya lipeando y se vaya seleccionando las coincidencias y si ya encontro lo que busca presione enter y ya si lo ponemos a csDropDownList solo reconoce la ultima tecla presionada

ContraVeneno 19-07-2007 00:26:20

La última tecla presionada dependiendo del valor que tengas en AutoCompleteDelay :D

Si esta dentro de ese rango de retardo, el combo sigue buscando letra por letra.

O sea que lo tendrían que ir escribiendo rápido :p

en fin, creo que con lo que dice Roman es más que suficiente, digo yo.

roman 19-07-2007 00:27:02

Cita:

Empezado por ContraVeneno
¿y si simplemente colocas la propiedad Style en "csDropDownList"?

------------Edito:
maese Roman: !

Ja, ja. De maese nada, simplemente si el condenado control se niega a selecionar el ítem, pues lo hacemos nosotros mismos :p

// Saludos

david_uh 19-07-2007 00:36:45

pues usando indexof lo selecionamos pero.. si la lista es muy grande digamos 100 mil entradas que se yo demoraria en ubicarla

de todas maneras podriamos usar el evento keypress
Código Delphi [-]
if Key = #13 then  combo.tag := combo.ItemIndex
y para listas pequeñas seria usando indexof. como sugerencia opino

ContraVeneno 19-07-2007 00:40:27

Yo opino que si van a ser incluso más de 100 elementos, lo mejor es utilizar otro tipo de control con una opción de búsqueda. :rolleyes:

david_uh 19-07-2007 00:46:14

Cita:

Empezado por ContraVeneno
La última tecla presionada dependiendo del valor que tengas en AutoCompleteDelay :D

Si esta dentro de ese rango de retardo, el combo sigue buscando letra por letra.

tengo delphi 6 yn o encuentro AutoCompleteDelay a que te refieres con eso?

ContraVeneno 19-07-2007 00:57:29

a que caray, yo estoy con Delphi 2006 :D
en delphi 10 el combobox tiene esa propiedad.

david_uh 19-07-2007 00:58:44

bueno gracias ya estaba entrando en panico :D


La franja horaria es GMT +2. Ahora son las 21:41:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi