Form1 qui ne s'affiche pas depuis un autre

WIEM7 Messages postés 15 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 1 mars 2013 - 9 janv. 2013 à 10:10
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 16 janv. 2013 à 13:08
javascript:void(0);
Bonjour,
j ai tellement besoin de votre aide.
ca fait des jours que je cherche une solution a mon problème mais sans résultat.
j'ai crée form1 puis j ai voulu avoir un menu principal dans j avais une image en cliquant dessus le form1 s'affiche mais j ai des erreurs.voici le code :
#include "Form1.h"
#pragma endregion
private: System::Void Nouveau_Click(System::Object^ sender, System::EventArgs^ e) {

Form1^ form1 = gcnew Form1();
form1->ShowDialog();


}

et voici l'erreur:
1) Erreur 19 error C2065: 'Form1' : undeclared identifier c:\documents and settings\administrateur\bureau\attachment (1)\microsoft visual c++ 2005 express\Menu_principal.h 187
2)Erreur 20 error C2065: 'form1' : undeclared identifier c:\documents and settings\administrateur\bureau\attachment (1)\microsoft visual c++ 2005 express\Menu_principal.h 187
3)Erreur 21 error C2061: syntax error : identifier 'Form1' c:\documents and settings\administrateur\bureau\attachment (1)\microsoft visual c++ 2005 express\Menu_principal.h 187
4)Erreur 22 error C2065: 'form1' : undeclared identifier c:\documents and settings\administrateur\bureau\attachment (1)\microsoft visual c++ 2005 express\Menu_principal.h 188
5)Erreur 23 error C2227: left of '->ShowDialog' must point to class/struct/union/generic type c:\documents and settings\administrateur\bureau\attachment (1)\microsoft visual c++ 2005 express\Menu_principal.h 188
aidez moi s'il vous plais car je suis bloqué depuis des jours.

7 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
9 janv. 2013 à 21:55
Salut,

tu n'aurais pas oublié de mettre un namespace devant ton objet ?
Celui se trouvant dans le fichier correspondant à #include "Form1.h"

NameSpaceform1::Form1^ form1 = gcnew NameSpaceform1::Form1();

Si ce n'est pas ça, poste le code du Form1.h

bye...
0
WIEM7 Messages postés 15 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 1 mars 2013 2
10 janv. 2013 à 10:22
javascript:void(0);
merci beaucoup yann_lo_san
pour ta réponse,mais ca marche pas
aide mois'il vous plais voici le code de "form1.h":

#pragma once


//Includes
#include <Windows.h>	
#include <Dbt.h>		
#include <setupapi.h>
#include 	

#include "Form2.h"
#include "Menu_principal.h"

namespace HIDPnPDemo {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;


#pragma region DLL Imports
using namespace System::Threading;	
using namespace System::Runtime::InteropServices;
#ifdef UNICODE
#define	Seeifdef	Unicode
#else
#define Seeifdef	Ansi
#endif

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiGetClassDevs", CallingConvention=CallingConvention::Winapi)]		
extern "C" HDEVINFO  SetupDiGetClassDevsUM(
LPGUID  ClassGuid,					
PCTSTR  Enumerator,					
HWND  hwndParent,					
DWORD  Flags);						

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiEnumDeviceInterfaces", CallingConvention=CallingConvention::Winapi)]				
extern "C" WINSETUPAPI BOOL WINAPI  SetupDiEnumDeviceInterfacesUM(
HDEVINFO  DeviceInfoSet,			//Input: Give it the HDEVINFO we got from SetupDiGetClassDevs()
PSP_DEVINFO_DATA  DeviceInfoData,	//Input (optional)
LPGUID  InterfaceClassGuid,			//Input 
DWORD  MemberIndex,					//Input: "Index" of the device you are interested in getting the path for.
PSP_DEVICE_INTERFACE_DATA  DeviceInterfaceData);//Output: This function fills in an "SP_DEVICE_INTERFACE_DATA" structure.

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiDestroyDeviceInfoList", CallingConvention=CallingConvention::Winapi)]
extern "C" WINSETUPAPI BOOL WINAPI  SetupDiDestroyDeviceInfoListUM(			
HDEVINFO  DeviceInfoSet);			//Input: Give it a handle to a device info list to deallocate from RAM.

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiEnumDeviceInfo", CallingConvention=CallingConvention::Winapi)]
extern "C" WINSETUPAPI BOOL WINAPI  SetupDiEnumDeviceInfoUM(
HDEVINFO  DeviceInfoSet,
DWORD  MemberIndex,
PSP_DEVINFO_DATA  DeviceInfoData);

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiGetDeviceRegistryProperty", CallingConvention=CallingConvention::Winapi)]
extern "C"	WINSETUPAPI BOOL WINAPI  SetupDiGetDeviceRegistryPropertyUM(
HDEVINFO  DeviceInfoSet,
PSP_DEVINFO_DATA  DeviceInfoData,
DWORD  Property,
PDWORD  PropertyRegDataType,
PBYTE  PropertyBuffer,   
DWORD  PropertyBufferSize,  
PDWORD  RequiredSize);

[DllImport("setupapi.dll" , CharSet = CharSet::Seeifdef, EntryPoint="SetupDiGetDeviceInterfaceDetail", CallingConvention=CallingConvention::Winapi)]
extern "C" BOOL SetupDiGetDeviceInterfaceDetailUM(
HDEVINFO DeviceInfoSet,										//Input: Wants HDEVINFO which can be obtained from SetupDiGetClassDevs()
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,				//Input: Pointer to an structure which defines the device interface.  
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData,	//Output: Pointer to a strucutre, which will contain the device path.
DWORD DeviceInterfaceDetailDataSize,						//Input: Number of bytes to retrieve.
PDWORD RequiredSize,										//Output (optional): Te number of bytes needed to hold the entire struct 
PSP_DEVINFO_DATA DeviceInfoData);							


[DllImport("user32.dll" , CharSet = CharSet::Seeifdef, EntryPoint="RegisterDeviceNotification", CallingConvention=CallingConvention::Winapi)]					
extern "C" HDEVNOTIFY WINAPI RegisterDeviceNotificationUM(
HANDLE hRecipient,
LPVOID NotificationFilter,
DWORD Flags);

#pragma endregion

#pragma region Global Variables

GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}; 


BOOL AttachedState = FALSE;						
BOOL AttachedButBroken = FALSE;					
PSP_DEVICE_INTERFACE_DETAIL_DATA DetailedInterfaceDataStructure = new SP_DEVICE_INTERFACE_DETAIL_DATA;	

HANDLE WriteHandleToUSBDevice = INVALID_HANDLE_VALUE;
HANDLE ReadHandleToUSBDevice = INVALID_HANDLE_VALUE;



BOOL PushbuttonPressed = FALSE;		

BOOL ResetCounterRequest= FALSE;		

BOOL CountdownModeRequest= FALSE;
BOOL RelaisToggleRequest= FALSE;
unsigned long int ADCValue = 0;			
unsigned long int TMRValue = 0;

#pragma endregion

/// <summary>
/// Summary for Form1
///

/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{private: Form2 ^ form2;
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
form2 = gcnew Form2();

//Additional constructor code


DEV_BROADCAST_DEVICEINTERFACE MyDeviceBroadcastHeader;
MyDeviceBroadcastHeader.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
MyDeviceBroadcastHeader.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
MyDeviceBroadcastHeader.dbcc_reserved = 0;	
MyDeviceBroadcastHeader.dbcc_classguid = InterfaceClassGuid;
RegisterDeviceNotificationUM((HANDLE)this->Handle, &MyDeviceBroadcastHeader, DEVICE_NOTIFY_WINDOW_HANDLE);





if(CheckIfPresentAndGetUSBDevicePath())
{
DWORD ErrorStatusWrite;
DWORD ErrorStatusRead;


WriteHandleToUSBDevice = CreateFile(DetailedInterfaceDataStructure->DevicePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
ErrorStatusWrite = GetLastError();
ReadHandleToUSBDevice = CreateFile(DetailedInterfaceDataStructure->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
ErrorStatusRead = GetLastError();

if((ErrorStatusWrite ERROR_SUCCESS) && (ErrorStatusRead ERROR_SUCCESS))
{
AttachedState = TRUE;		
AttachedButBroken = FALSE;
}
else 
{
AttachedState = FALSE;		
AttachedButBroken = TRUE;	
if(ErrorStatusWrite == ERROR_SUCCESS)
CloseHandle(WriteHandleToUSBDevice);
if(ErrorStatusRead == ERROR_SUCCESS)
CloseHandle(ReadHandleToUSBDevice);
}
}
else	
{
AttachedState = FALSE;
AttachedButBroken = FALSE;
}


ReadWriteThread->RunWorkerAsync();	



}

protected:
/// <summary>

/// </summary>
~Form1()
{
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
13 janv. 2013 à 17:56
Salut,

j'ai créé un projet CLR de base
par défaut le main applique Run sur Form1 :
Application::Run(gcnew Form1());

J'ai ensuite créé un Form2, pour l'appeler depuis Form1.

Par défaut, VS n'ajoute pas l' #include "Form2.h" dans Form1.h

Je l'ai donc rajouter manuellement et dans un click d'un bouton j'ai pu faire
Form2^ form2 = gcnew Form2();
form2->ShowDialog();

Lorsque tu crées une nouvelle Form, il faut donc veiller à rajouter les #include dans les .h ou tu veux les utiliser,
pour les namespace, si'ils ne sont pas changés manuellement, pas la peine de préfixer.

Donc, dans mon cas, aucun problème.

Dans ton cas, quelle est la classe que le main lance dans le Application::Run() ?

Autre chose, as tu changé le nom de la classe pricipale (Form1) ?

bye...
0
WIEM7 Messages postés 15 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 1 mars 2013 2
15 janv. 2013 à 09:59
javascript:void(0);
merci une autre fois yann_lo_san pour ta réponse.
1)la classe que le main lance dans le Application::Run() au début été Form1 mais maintenant je vient de le changer par Menu_principal.
2)lorsque j'ai changer le nom de Form1 par calcul j'ai eu plein de fautes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
15 janv. 2013 à 12:58
Re,

as tu vu le commentaire de Visual Studio au dessus du Application::Run()

Ce commentaire dit :
ATTENTION,
si vous changer le nom de la classe principale (Form1), reporter manuellement ces modifications dans le fichier de Ressource correspondant.

Apparemment, Visual ne sait pas gérer le renomage de la classe dans les fichiers annexes (resources, assemblyInfo ect...)

Donc, vérifier toutes les références à Form1 et remplacer par le nouveau nom:

Faire :
Menu rechercher
un mot ou une phrase dans le fichier
Appliquer la recherche à TOUTES LA SOLUTION

bye...
0
WIEM7 Messages postés 15 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 1 mars 2013 2
16 janv. 2013 à 12:36
javascript:void(0);
Bonjour yann_lo_san;
lorsque j'ai changer le nom j ai eu les même faute que la 1er fois mais avec le nouveau nom de form
les erreurs:
1)error C2065: 'calcul' : identificateur non déclaré
2)error C2065: 'cal' : identificateur non déclaré
3)error C2061: erreur de syntaxe : identificateur 'calcul'
4)error C2065: 'cal' : identificateur non déclaré
5)error C2227: la partie gauche de '->Show' doit pointer vers un type class/struct/union/générique
QUE DOIS JE FAIRE
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 janv. 2013 à 13:08
Re,

Toutes ces erreurs veulent dire qu'il ne reconnait pas l'objet Formulaire utilisé

Ou il manque un #include quelque part
Ou le renommage n'a pas été fait partout

Je te conseille de repartir sur un nouveau projet bien nommé dès le départ, puis d'ajouter un à un les modules necessaires en compilant à chaque fois pour être sur que le module ajouté est bien connu.

Sinon rechercher toutes le références à Form1 dans tous les fichiers (rc, sln, vsproj ect...)
et de remplacer par Menu_principal
et vérifier que tous les namespace sont identiques ou sont importé avec using namespace.


bye...
0
Rejoignez-nous