C/Visual C - Form en Visual C++ 2005

 
Vista:

Form en Visual C++ 2005

Publicado por Ferny (6 intervenciones) el 02/01/2007 16:41:31
Hola estoy haciendo un proyecto en Visual C++ 2005 y el problema con el que me he encontrado esque no se como mostrar un formulario. Explico mi problema:

Tengo un Form1 que cada vez que ejecuto la aplicacion aparece y me gustaria que al pulsar un Boton saliera un Form2.

Para ello con el boton derecho he añadido un nuevo Form que lo he llamado form2.

Entonces en el evento on click del boton he añadido este codigo:

i_medicos^ prueba= gcnew i_medicos;
prueba->ShowDialog();

Y me salen los siguientes errores.

Error 1 error C2065: 'i_medicos' : identificador no declarado
Error 2 error C2065: 'about' : identificador no declarado
Error 3 error C2061: error de sintaxis : identificador 'i_medicos'
Error 4 error C2227: el operando izquierdo de '->ShowDialog' debe señalar al tipo class/struct/union/generic

Lo unico que quiero es abrir un formulario que he creado y que contiene un formulario de introduccion de datos. Alguien podria ayudarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Form en Visual C++ 2005

Publicado por Nelek (816 intervenciones) el 03/01/2007 08:26:27
Mmm, la verdad es que el 2005 aun no lo he visto, pero en el VC++6 seria...

i_medicos* prueba= new i_medicos ();
prueba->ShowDialog();

Prueba a ver...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Ferny (6 intervenciones) el 03/01/2007 09:23:43
Al ser visual c administrado el new no lo reconoce y he de usar un gcnew y en cuanto al *, en visual 2005 es un ^ y aunque lo haga con * no funciona :S no me reconoce prueba como parte del form i_medicos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Nelek (816 intervenciones) el 03/01/2007 10:28:58
Pues no sé, lo siento, lo mio está algo obsoleto entonces :P

A ver si Fernando lee este hilo y te dice algo, que sus conocimientos son mucho mayores y actuales que los míos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Ferny (6 intervenciones) el 03/01/2007 10:39:25
Ok :)

Bueno esque lo raro eqsue cuando estoy en el Form1 pongo:

Form1:: y me la lista de procedimientos y nos e que mas mientras que si pongo Form2:: no muestra nada de informacion.

Por otro lado si en el Form1 pongo #include "Form2.h" puedo acceder a toda la info del Form2:: pero esto es muy "feo" y no se que hacer necesito acceder a la informacion de ambos forms desde uno y otro y no he encontrado la forma de acceder sin incluir los Forms.h que creo que no es recomendable :S

Llevo semanas intentado tirar palante el proyecto de clase pero esque no hay forma si no es por una cosa es por otra... y la verdad esque voy bastante perdido porque he tocado C++ Consola pero el Visual C nunca y todos los de mi clase vamos perdidismos y los profesores no nos han dado guias de referencia ni nada asin q... no se donde consultar ni donde preguntar para que me puedan ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Nelek (816 intervenciones) el 03/01/2007 11:09:52
Mmmm,

como que lo de incluir los *.h es feo? Sera todo lo feo que quieres, pero si no lo haces unos no van a saber que o donde buscar en los otros. Si no quieres ir poniendo en cada *.cpp los *.h de las clases relacionadas... Una opcion es declararlos todos los .h en el stdafx.h porque ese (al menos en el VC 6) es incluido automaticamente en todos los ficheros. O te creas tu propio "cabeceras.h" y ahi metes los include de todas tus clases, incluyendo despues una unica linea en cada una de tus clases.

Pero sin los include... ni de conia. A no ser que el VC 2005 sea tan nuevo y potente que ya no necesite saber que objetos/clases son usados por que otros objetos/clases. Si ese es el caso... Retiro lo dicho y me tiro las manos a la cabeza :P
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Ferny (6 intervenciones) el 03/01/2007 13:22:34
Weno siguiendo tu consejo en el Form1.h he puesto #include "Form2.h" y en stdafx.h todo mi codigo del programa que tiene el siguiente namespace:

namespace conversion {

using namespace System;

void a_string ( String ^ s, string& os ) {
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
os = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
}

}

Es una funcion que se encarga de convertir un String administrado a un basic string. El problema esque en el Form1.h al hacer un #include "Form2.h" me salta el siguiente error:

Error 1 error LNK2005: ya se definió "void __clrcall conversion::a_string(class System::String ^,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?a_string@conversion@@$$FYMXP$AAVString@System@@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) en M1_final.obj stdafx.obj

Que no se que carajo dice... entonces intente definir en stdafx.h un #include "Form1.h" #include "Form2.h" el resultado esque si lo hago me dice el error que sale por ahi arriba.

No se que hacer necesito esta funcion que si la uso en el form1.h sin usar ningun otro form funciona mientras que si lo pongo en un m1.h y en el stadfx.h hago un #include "m1.h" y en el form1.h un #include "form2.h" me peta.

Me dice que ya ta definida cuando no se pq me lo dice cuando solo la añado una vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Nelek (816 intervenciones) el 04/01/2007 09:39:56
Jejeje, no hombre... yo lo que dije fue:

Pon dentro del stdafx.h todos los #include XXX.h que tengas y en cada XXX.cpp ya tienes automáticamente el #include stdafx.h

Aunque a mi tbn me dió problemas un par de veces, así que desde entonces lo que hago es crearme mi propio "headers.h" y ahí le meto todos los #include XXX.h que tengo en el proyecto, luego simplemente pongo el #include headers.h en el fichero de cabecera de cada clase, no sé si es mejor, pero a mi me gusta más poner los include en las cabeceras de las clases en lugar de en el codigo.

Ejemplo:

<headers.h>
#include CInputData.h
#include COutputData.h
#include CReglerData.h
#include CInConData.h
#include COutConData.h
#include CRegConData.h
#include FPSView.h
#include FPSDoc.h
.... etc

<CInputData.h>
#include headers.h

<COutputData.h>
#include headers.h

... etc

Aunque tbn puede ser en:

<CInputData.cpp>
#include headers.h

<COutputData.cpp>
#include headers.h

...etc

espero que te sirva, a mi me funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Form en Visual C++ 2005

Publicado por Nelek (816 intervenciones) el 04/01/2007 09:45:13
Otra cosa en la que acabo de caer (no lei detenidamente lo que dijiste)

Yo por ejemplo uso un puntero al Documento de mi aplicacion que tiene que ser en todo el proyecto.

en el stdafx.cpp tengo:

CFPSDoc* m_pFirstDoc;

y luego, en los otros módulos donde tengo que usarlo hago:

extern CFPSDoc* m_pFirstDoc;

Tuve que hacerlo así porque lo que intento es tener un único documento con varias Vistas en una Aplicacion MDI. Quizá no sea la mejor forma, pero me funciona. Cuando le doy a OnNewDocument consulto si ese puntero es NULL antes de crear el nuevo, si no lo es, llamo al OnCloseDocument preguntando si se quieren guardar los cambios antes de establecer el nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar