FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Acción inesperada de ListBox->ItemIndex
Hola a tods! tengo una dudilla...
tengo un Form1 en el cuál tengo un botón, mediante el evento OnClick llamo a: Código:
Form2->ShowModal(); Código:
void __fastcall TForm2::FormCreate(TObject *Sender) { MiClass * mio = new MiClass (); mio -> GetAlgo(); delete mio } y en el Unit3.cpp: Código:
... for ( ) { cadena = ..... Form2->ListBox1->Items->Add(cadena); } /* int num=Form2->ListBox1->ItemIndex; if (num==1) { ShowMessage("algo"); } if (num == 2) { } ... */ 1. ejecuto el .exe 2. muestra el Form1 3. click al botón 4. muestra el Form2 con el ListBox1 rellenado de los items que le indico: Form2->ListBox1->Items->Add(cadena); Pero cuando lo ejecuto todo (incluyendo lo comentado), se ejecuta: 1. ejecuto el .exe 2. muestra ShowMessage("algo"); 3. muestra Form1..... como es posible?? Algo estoy pasando por alto, pero no se qué es. Lo que quiero hacer es que al clickear el botón de Form1 me muestra un Form2 con los items ya mostrados en el ListBox y que, al seleccionar alguno de ellos, me muestre la información que yo quiera en el Form1. gracias, espero haberme explicado bien. |
#2
|
||||
|
||||
No termino de entender exactamente, pero voy a tratar de responder.
Si en Unit3 tu código mostrado no está implementado como funciones miembro de la clase MiClas (que creo entender que es Form2) entonces puede ejecutarse fuera de MiClas. Yo implementaría en el constructor de MiClas la carga del ListBox. De esta forma ese código se ejecuta en el momento de crear esa clase. |
#3
|
|||
|
|||
Hola,
únicamente en el Unit2.cpp tengo Código:
void __fastcall TForm2::FormCreate(TObject *Sender) { MiClass * mio = new MiClass (); mio -> GetAlgo(); delete mio } Cita:
Código:
void MiClass::GetAlgo() { ... for ( ) { cadena = ..... Form2->ListBox1->Items->Add(cadena); } /* int num=Form2->ListBox1->ItemIndex; if (num==1) { ShowMessage("algo"); } if (num == 2) { } ... } Cita:
No sé todavía qué pasa, si alguien me puede decir algo... |
#4
|
||||
|
||||
No entiendo la utilidad de tu codigo, supongo que es un experimento.
Creo que tu problema esta en cargar el ListBox (bucle de Add) en el evento OnCreate del Form2 (puesto que aquí llamas a getAlgo que tiene el bucle de carga del ListBox). OnCreate se genera al crearse una ventana, aunque todavía no la veas. Experimenta lo siguiente aunque para ello MiClass debe ser un formulario: No utilices Form2. En el evento de OnClick de Form1 coloca el codigo: Código:
MiClass * mio = new MiClass (); mio->ShowModal(); mio->GetAlgo(); delete mio; De esta forma te aseguras que "mio" esta creado y visualizado de forma modal y luego GetAlgo se encarga de la tarea que le encomendaste. Esto funcionará como tu quieres. Si Form2 te resulta necesario, entonces, tu código no debería mostrar el mensage desde GetAlgo, sino desde el evento OnChange del ListBox. Yo utilizo un truco cuando no me queda mas remedio que colocar código que puede ejecutarse antes de visualizar una ventana y es colocar un Timer y en el evento OnTimer coloco ese código "sensible". OnTimer se produce cuando el Form que lo contiene ya es visible. Pero trato de no hacer nunca esto porque me parece "chapucero". Espero servirte de ayuda. Saludos. Última edición por escafandra fecha: 04-02-2008 a las 20:06:20. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
DBLookupComboBox.itemindex? | look | OOP | 12 | 24-01-2011 17:46:42 |
Detectar cambio de ItemIndex en ComboBox | ixMike | OOP | 5 | 19-10-2006 20:39:03 |
RadioGroup1.ItemIndex | FGarcia | Varios | 6 | 21-06-2006 20:45:03 |
TListView: Obtener el ItemIndex de un Caption | DarkByte | OOP | 3 | 09-10-2005 12:45:49 |
TComboBox ItemIndex anterior a la ejecución de Change | zemog76 | OOP | 6 | 04-02-2005 16:57:37 |
|