| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mie 19 Ene, 2005 8:10 am Asunto: Simular un evento OnClick() en un TListBox por código |
|
|
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 |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Dom 23 Ene, 2005 11:42 am Asunto: |
|
|
Hola.
¿Nadie me puede echar una mano?
Saludos. _________________ Nunca digas "Es imposible" sin intentarlo antes. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 23 Ene, 2005 5:52 pm Asunto: |
|
|
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 |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 23 Ene, 2005 11:12 pm Asunto: |
|
|
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 |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mar 25 Ene, 2005 3:43 pm Asunto: |
|
|
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.
.
Gracias y un saludo.[/quote] _________________ Nunca digas "Es imposible" sin intentarlo antes. |
|
| Volver arriba |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Dom 13 Feb, 2005 12:29 pm Asunto: |
|
|
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 |
|
 |
|