Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas con ListBox (https://www.clubdelphi.com/foros/showthread.php?t=56871)

NEG1414 29-05-2008 18:09:28

Problemas con ListBox
 
Buenas:

Dentro de un Listbox cuyos elementos estan ordenados alfabeticamente al pulsar una tecla alfanumerica el item que me selecciona es siempre el segundo del grupo de items que empiezen por la tecla pulsada..nunca el primero (a mi os aseguro que me pasa) .

Alguien sabe porque y como puedo hacer que la posicion sea el primeros del grupo de items que empiezen por la tecla pulsada.


Código:


TStringList  *Lista  = New TStringList

    Lista->Add("A")
    Lista->Add("AB") 
    Lista->Add("AC")
    Lista->Add("B")
    Lista->Add("BA")
    Lista->Add("C")
    ...

    Lista->Sorted;


    for (int i=0;i<Lista->Count;i++)
      {
          ListBox1 ->Items->Text = Lista->Text
      }

Gracias.

escafandra 30-05-2008 15:28:26

NEG1414 He probado tu código como lo posteaste, añadiendo algún punto y coma... No me pasa lo que dices, me funciona correctamente y como debería. A cada pulsación de la tecla, el selecionado avanza un lugar en la lista.

Saludos.

NEG1414 30-05-2008 17:31:04

En primer lugar gracias por atenderme.

Al leer tu respuesta he optado por probar el codigo en otro PC el codigo que he puesto es el siguiente:

Código:

void __fastcall TForm1::FormActivate(TObject *Sender)
{

TStringList  *Lista  = new TStringList;

    Lista->Add("A");
    Lista->Add("AB");
    Lista->Add("AC");
    Lista->Add("B");
    Lista->Add("BA");
    Lista->Add("C");

    Lista->Sorted=true;


    for (int i=0;i<Lista->Count;i++)
      {
          ListBox1 ->Items->Text = Lista->Text;
      }

}

Lo he pegado,Te juro que sigue Haciendo lo mismo:

Pulso la tecla A: salta a AB

Pulso la tecla B: salta a BA (quiero que salte a B)

Pulso la tecla c : Salta a C

Pulso la tecla a : Salta a AB (quiero que salte a A)


NOTA: DONDE HAS INCLUIDO EL CODIGO?.

Gracias otra vez

escafandra 30-05-2008 18:54:48

Pues ese mismo código que propones es lo que yo he probado. Sólo con una diferencia, lo coloqué en el evento de un botón y Listbox1 es simplemente un TListBox incluido en el formulario principal Form1.

Ya te digo, me funciona como esperaba que lo hiciese.

Saludos.

EDITO: Lo he probado en el evento OnActivate y también me funciona. Te dejo como lo he hecho Archivo Adjunto 1268. Añado una linea más:
Código:

delete Lista;
Pero no deja de funcionar por su falta.

NEG1414 31-05-2008 09:16:23

Gracias por seguir conmigo..

He intentado poner a funcionar tu codigo pero me han surgido dos problemas

1: Mi version de builder es la 6

2: al intentar compilar no encuentra el paquete donde esta el archivo Mios.bpi (he buscado el archivo y no lo tengo en el pc)

No he podido ejecutarlo....

La diferencia de version y la ausencia del archivo Mios.bpi puede tener algo que ver.

Gracias otra vez.


escafandra 31-05-2008 16:41:35

Bueno, Mios.bpi es una librería de compomentes que he ido creando yo mismo y que tengo colocado por defecto en mis proyectos. Realmente no hace falta para el ejemplo que te envié. Eliminala en las opciones de proyecto / Packages /design packages y de la opcion build with runtime packages. Elimina tambien todas las librerías que yo pueda tener instaladas y que tu no tengas. De esa forma lo podrás compilar.

Sobre la pregunta de si tiene que ver Builder 6, pues no lo se. En El BC5 he tenido que corregir un bug de la clase fstream... De todas formas las mismas clases VCL las usa delhi y están muy testadas. ¿Estamos ante un nuevo bug? Seria bueno que lo comprobaras y que otros miembros lo hicieran también. Si es así, se puede modificar el código fuente de la clase TListBox y publicarlo como truco o corrección de bug.;)


¿El ejecutable que te puse funciona?

Aquí te dejo el proyecto linkado de forma estática para que funcione aunque falten librerías en tu PC. Informamé.

Saludos.

escafandra 31-05-2008 17:07:27

Bueno, no existe ningún bug. He hecho una prueba con delphi 6:

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
    ListBox1.Items.Add('A');
    ListBox1.Items.Add('AB');
    ListBox1.Items.Add('AC');
    ListBox1.Items.Add('B');
    ListBox1.Items.Add('BA');
    ListBox1.Items.Add('C');
    ListBox1.Sorted := true;
    end;

end.



si no colocas ListBox1.Sorted := true; funciona como tu dices.

En definitiva tu codigo c tiene algún error y ademas falta ListBox1->Sorted = true;

Sería algo así:
Código:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
  ListBox1->Items->Add("A");
  ListBox1->Items->Add("AB");
  ListBox1->Items->Add("AC");
  ListBox1->Items->Add("B");
  ListBox1->Items->Add("BA");
  ListBox1->Items->Add("C");
  ListBox1->Sorted=true;
}

Aquí te dejo el ejemplo:

Saludos.

EDITO: mira esto también:
Código:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
    TStringList  *Lista  = new TStringList;

    Lista->Add("A");
    Lista->Add("AB");
    Lista->Add("AC");
    Lista->Add("B");
    Lista->Add("BA");
    Lista->Add("C");

    Lista->Sorted = true;

    ListBox1->Items->Text = Lista->Text;

    // Prueba con esta línea y sin ella:
    ListBox1->Sorted = true;

    delete Lista;

}


NEG1414 01-06-2008 16:59:55

!!!PERFECTO!!!

Has dado con el problema, una vez añadida esa linea el programa funciona perfectamente.

Muchas Garcias..

Postdata: He puesto esta cuestion en 5 foros Builder y has sido el unico que has contestado.

NEG1414 02-06-2008 20:04:58

Otra vez yo... Tengo oto problema:


Cuando ejecuto el codigo me muestra el listbox correctamente pero si quiero seleccionar un elemento de listbox (item) con el raton no puedo

Es normal...Se puede seleccionar un item con el raton?

Gracias

escafandra 02-06-2008 21:55:23

Coloca la propiedad TabStop del ListBox en el Object Inspector a false.
Date cuenta que aquí también puedes poner el valor deSorted a true o false.

Saludos.

NEG1414 03-06-2008 16:14:21

Gracias has dado otra vez con la solucion.

Gracia otra vez.

"La ignorancia es una enfermedad que se cura preguntando"


La franja horaria es GMT +2. Ahora son las 06:04:05.

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