Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-06-2011
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
edit + listbox

Alguien sabes como hacer para ir escribiendo un articulo en un edit y se vaya filtrando en un listbox dependiendo de la palabra ingresada?

Ejemplo:

Si pongo "A" en el edit me aparecen : ALFOMBRAS, ARANDELAS, AURICULARES, AUTOS..

y si pongo "AU" me aparezcan AURICULARES, AUTOS..

desde ya muchas gracias!
Responder Con Cita
  #2  
Antiguo 04-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fedee.

Se me ocurre que podés aprovechar el evento OnChange del Edit:
Código:
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  int i = 0;
  boolean Found = FALSE;
  while(i < ListBox1->Count && !Found) {
    Found = ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) == Edit1->Text;
    i++;
  }
  if(Found)ListBox1->ItemIndex = i-1;
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 05-06-2011 a las 00:24:12.
Responder Con Cita
  #3  
Antiguo 05-06-2011
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
ecfisa: Antes q nada te remil agradezco por tu ayuda.. pero copie tal cual eso en el OnChange pero no sale nada.. q sera?

edit: ahi medio q supe resolverlo pero yo queria q se vayan filtrando.. osea q vayan desapareciendo los q no cumplen con las letras ingresadas.. me explico?
Responder Con Cita
  #4  
Antiguo 05-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fedee.
Cita:
osea q vayan desapareciendo los q no cumplen con las letras ingresadas
Código:
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 int i;
  boolean Found= FALSE;
  /* Eliminar no coincidentes */
  for(i=0;i<ListBox1->Count;i++)
    if(ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) !=
            Edit1->Text) ListBox1->Items->Delete(i);
  /* Posicionarse */
  for(i=0;i< ListBox1->Count && !Found; i++){
    Found = ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) ==
            Edit1->Text;
}
Pero el problema que veo con eso es que si el usuario se arrepiente, luego de haber tipeado algunos caracteres,
ya no tendrá disponible los otros items.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 06-06-2011
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
si, ahi vi.. creo q me quedo con el anterior! si llegas a resolverlo te lo remil agradeceria!!
Responder Con Cita
  #6  
Antiguo 06-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola fedee.

Fijate si de este modo hace lo que estas buscando:
Código:
...
TStrings *TS = new TStringList;

void __fastcall TForm1::FormShow(TObject *Sender)
{
 int i;
 for(i=0;i < ListBox1->Count; i++)
   TS->Add(ListBox1->Items->Strings[i]);
}

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  int i;
  boolean Found= FALSE;
  for(i=0;i<ListBox1->Items->Count;i++)
    if(ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) !=
            Edit1->Text) ListBox1->Items->Delete(i);

  for(i=0;i< ListBox1->Items->Count && !Found; i++)
    Found = ListBox1->Items->Strings[i].SubString(1,Edit1->Text.Length()) ==
            Edit1->Text;
  if (Found)   
    ListBox1->ItemIndex = i-1;
  else {      
    for(i=0; i< TS->Count; i++)
      ListBox1->Items->Strings[i] = TS->Strings[i];
    ListBox1->ItemIndex  = -1;
  }
}
...
Al comenzar en el evento OnShow se almacenan los valores del TListBox en un TStringList.
En el evento OnChange del TEdit si al finalizar la búsqueda incremental no se encontro ninguna coincidencia, se restaura la lista inicial en el TListBox desde el TStringList.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-06-2011 a las 03:24:36.
Responder Con Cita
  #7  
Antiguo 06-06-2011
fedee fedee is offline
Miembro
 
Registrado: feb 2009
Posts: 14
Poder: 0
fedee Va por buen camino
ecfisa:

Hice todo y anda bien.. el tema es q cuando borro no se vuelven a todos los items del listbox.. solo cuando se hace el formshow..

Última edición por fedee fecha: 06-06-2011 a las 03:12:00.
Responder Con Cita
  #8  
Antiguo 06-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si de ese modo, la restaura cuando después de escribir no encuentra más coincidencias.
Para que lo haga cuando el Edit esté vacío, reemplaza estas líneas:
Código:
 if (Found)   
    ListBox1->ItemIndex = i-1;
  else {      
    for(i=0; i< TS->Count; i++)
      ListBox1->Items->Strings[i] = TS->Strings[i];
    ListBox1->ItemIndex  = -1;
  }
Por estas:
Código:
 if (Found)
    ListBox1->ItemIndex = i-1;
  if(Edit1->Text.Length() == 0){
    for(i=0; i< TS->Count; i++)
      ListBox1->Items->Strings[i] = TS->Strings[i];
    ListBox1->ItemIndex  = -1;
  }
En realidad el código que restaura los items es sólo este:
Código:
 for(int i=0; i< TS->Count; i++)
      ListBox1->Items->Strings[i] = TS->Strings[i];
Lo podés ubicar en el evento OnClick de un TButton, luego de evaluar alguna condición o en donde quieras que sea restaurado.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-06-2011 a las 03:37:35.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
agregar y/o eliminar items de un listbox a partir de otro listbox Goyo PHP 2 27-09-2007 16:46:30
Realizar búsquedas en un ListBox mediante un Edit Lester Varios 5 08-06-2007 19:16:18
Unir Edit con Edit Caral Varios 8 17-11-2006 21:37:35
problemas con el el .Edit: qryCONSULTA.Edit McRose Conexión con bases de datos 3 07-06-2005 15:46:39
seleccion de listbox a edit migueilichenco Varios 3 15-11-2003 04:39:14


La franja horaria es GMT +2. Ahora son las 10:33:00.


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