Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Simular un evento OnClick() en un TListBox por código

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Simular un evento OnClick() en un TListBox por código Responder citando

Hola a todos.

Mi problema es el siguiente: en un TEdit tengo un texto. Este texto está dentro de los items de un TListBox. Pues bien, cuando cambio el contenido del TEdit (siempre va a ser un item válido, no hay que comprobarlo) quiero lanzar el evento OnClick() del TListBox y seleccionar el item que se corresponde con el que figura en el TEdit, y todo ello por código. He probado a poner en el evento TEdit1OnChange() del TEdit la función TListBox1OnClick(), pero no consigo nada.
¿Alguna ayuda?

Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola.

¿Nadie me puede echar una mano?

Saludos.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, Cerúleo. No entiendo demasiado bien el problema que planteas. Primero comentas
Cita:
en un TEdit tengo un texto. Este texto está dentro de los items de un TListBox
Por lo que entiendo el texto se "lee" desde el TListBox. Tengamos en cuenta aquí que si permites editar ese texto puede que el nuevo texto ya no se encuentre entre los items del TListBox. A continuación indicas
Cita:
cuando cambio el contenido del TEdit (siempre va a ser un item válido, no hay que comprobarlo)
¿Con qué código haces esto? ¿Cómo sabes que va a ser un ítem válido? ¿No es posible que el usuario introduzca un item no válido? yo pienso que no solamente es posible si no altamente probable. Si nos aclaras esto puede que se nos ocurra algo para ayudarte.

Por otro lado no sé si la opción de usar TEdit1OnChange es la más apropiada, ten en cuenta que se dispara con muchos eventos. Puede resultarte mejor usar el evento onExit y manipular el TListBox sólo cuando el usuario "confirma" que ya ha terminado de modificar el TEdit.

Supongo que el siguiente código te puede dar pistas de cómo manipular el TListBox, pero no puedo ser más concreto si no me aclaras las dudas que te he expuesto. Se trata del código con que completo un TListBox (lbCampos) a partir de los campos de un TStringList (sl).
Código:
   for (int i = 1; i < sl->Count; i++)
      if (lbCampos->Items->IndexOf(sl->Strings[i]) == -1)
         {
         lbCampos->Items->Add(sl->Strings[i]);
         //En su objeto colocamos un 0 indicando que en principio se guardará
         lbCampos->Items->Objects[lbCampos->Count - 1] =
                                                       reinterpret_cast<TObject*>(0);
         }

Suerte
_________________
Ojos ... no son ojos porque los ves, son ojos porque te miran
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Quizá este código sea lo que estás buscando
Código:

void __fastcall TForm1::Edit1Change(TObject *Sender) {
   int elemento = ListBox1->Items->IndexOf(Edit1->Text);
   if (elemento != -1)
      ListBox1->ItemIndex = elemento;
}
Al final no me ha parecido descabellada la idea de que se use en el evento onChange.

Suerte.
_________________
Ojos ... no son ojos porque los ves, son ojos porque te miran
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:
Hola, Cerúleo.

Hola, Enrique.
Cita:
No entiendo demasiado bien el problema que planteas. Primero comentas (...). Por lo que entiendo el texto se "lee" desde el TListBox. Tengamos en cuenta aquí que si permites editar ese texto puede que el nuevo texto ya no se encuentre entre los items del TListBox. A continuación indicas (...) ¿Con qué código haces esto? ¿Cómo sabes que va a ser un ítem válido? ¿No es posible que el usuario introduzca un item no válido? yo pienso que no solamente es posible si no altamente probable. Si nos aclaras esto puede que se nos ocurra algo para ayudarte.

El tema es el siguiente: desde una ventana, con un TEdit con texto validado abro otra ventana donde existe otro TEdit en el que copio el texto anterior (por eso sé que es válido). Al variar este texto debe lanzar un evento que simula el click de ratón en el TListBox. Por eso no puedo usar el evento OnExit() del TEdit, porque esto lo pongo en el constructor de la nueva ventana, antes de que el usuario haya hecho nada.
Cita:
Por otro lado no sé si la opción de usar TEdit1OnChange es la más apropiada, ten en cuenta que se dispara con muchos eventos. Puede resultarte mejor usar el evento onExit y manipular el TListBox sólo cuando el usuario "confirma" que ya ha terminado de modificar el TEdit.

Esto es lo que ya te he comentado. El lanzamiento del evento tiene lugar en el OnCreate() de la nueva ventana, antes de que el usuario haga nada.
Cita:
Supongo que el siguiente código te puede dar pistas de cómo manipular el TListBox, pero no puedo ser más concreto si no me aclaras las dudas que te he expuesto. Se trata del código con que completo un TListBox (lbCampos) a partir de los campos de un TStringList (sl).Código:
for (int i = 1; i < sl->Count; i++)
if (lbCampos->Items->IndexOf(sl->Strings[i]) == -1)
{
lbCampos->Items->Add(sl->Strings[i]);
//En su objeto colocamos un 0 indicando que en principio se guardará
lbCampos->Items->Objects[lbCampos->Count - 1] =
reinterpret_cast<TObject*>(0);
}

Lo probaré y seguiré enredando.
Cita:
Suerte
.
Gracias y un saludo.[/quote]
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola.
Bueno, después de dejarlo a un lado un tiempo, lo he retomado y, como suele pasar, con la mente fresca rindes más.
La solución era más sencilla de lo que parecía:
Código:
int i=ListBox1->Items->IndexOf(Edit1->Text);
ListBox1->ItemIndex=i;
ListBox1->Onclick();

Sencillamente obtengo el elemento seleccionado (el que se corresponde con el texto del TEdit). Le indico a la lista que es el elemento seleccionado actualmente (y no con la propiedad Selected, como intentaba antes). Y luego lanzo el evento onclick.
Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.