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;
Y en GetAlgo() coloca el código que tenías.
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.