none
Ouverture d'un form d'un projet, à partir d'un autre projet dans un solution RRS feed

  • Question

  • J'ai créé une solution avec deux projets distincts que j'avais créer par le passé.

    Je souhaiterai créer un formulaire d'accueil qui me permettrai de choisir quels projet et donc par extension quel Form je veux lancer.

    Merci par avance

     

    un étudiant

    mercredi 11 juillet 2007 12:43

Réponses

  • Pour éviter les conflits de noms de classe, le .NET utilise les espaces de nom.

     

    Pour faire simple il faut considérer les espaces de nom comme "des dossiers" et les classes comme "des fichiers".

    Exemple :

     

    Code Snippet

    namespace Alpha.Beta.Delta

    {

          public class Class1

          {

     

          }

    }

     

     

    Ici la classe se trouve dans l'espace de nom (ou dossier) Alpha.Beta.Delta. Sous .NET, on utilise toujours le nom complet des classes. Pour faire l'analogie aux fichiers, cela représente exactement le chemin complet d'un fichier.

     

    Ainsi votre classe se nomme Alpha.Beta.Delta.Class1 ET NON Class1.

     

    Le problème c'est qu'écrire du code comme ceci :

     

    Code Snippet

    Alpha.Beta.Delta.Class1 c;

    c = new Alpha.Beta.Delta.Class1();

     

     

    Est très lourd... Sous .NET il existe un mécanisme permettant d'utiliser les noms court en ajoutant la clause "using xxxxx".

    Contrairement à ce que peuvent penser beaucoup d'étudiant la clause using n'a aucun rapport avec un "#include en C".

     

    Ainsi tu peux écrire le code précédent comme ceci :

     

    using Alpha.Beta.Delta;

    ...

     

    Code Snippet

    namespace AutreEspaceNom

    {

    ...

    Class1 c;

    c = new Class1();

    ..

    }

     

     

    A la compilation le compilateur vas rechercher la classe "Class1" dans l'espace de nom AutreEspaceNom, s'il trouve pas il les recherche via les using placé en début de fichier. (Et si malgré tout le compilateur ne trouve aucune classe dans les espaces de nom spécifiés par les using, il te génère un message d'insulte...)

     

    Pour revenir à ton cas :

    Tes 2 Form dans les autres projets sont dans un espace de nom qui doit être différent de l'espace de nom de Form d'accueil... Tu dois donc ajouter un "using MonEspaceDeNom_DeMaForm1" au niveau de ta Form d'accueil ou instancier ta Form comme ceci :

     

    Code Snippet

    MonEspaceDeNom_DeMaForm1.Form1 f;

    f = new MonEspaceDeNom_DeMaForm1.Form1();

     

     

    Pour information : Mettre beaucoup d'using ne change rien à la vitesse d'execution de ton application... Car à la compilation se sont "les noms complet" des classes qui sont enregistrés. Les using sont uniquement utilisé par le compilateur...

    Aussi il faut penser que si tu fais :

     

    using Espace1;

    using Espace2;

     

    Et que dans chacun de ses espaces tu as une classe MaClasse, il faudra lors de la déclaration d'une variable de MaClasse spécifier explicitement l'espace de nom... Car le compilateur ne sait pas du tout quelle classe prendre !

     

    Cordialement

    samedi 14 juillet 2007 08:24
    Modérateur

Toutes les réponses

  • Il suffit dans ton "projet d'accueil" d'ajouter 2 références vers tes 2 projets.

    Dans ta fenêtre d'accueil ajout 2 boutons qui ouvriront la bonne Form de ton projet...

     

    Cordialement

    mercredi 11 juillet 2007 13:39
    Modérateur
  • Je vous remercie de v ous interesser à mon cas mais vous n'avez pas totalement répondu à ma question.

    Je ne sais pas quel instruction je doit mettre pour faire appel à un form d'un autre projet.

    Avec le texte que j'utilisais, le programme m'annonce "Nomdelaform n'est pas déclaré"

     

    Dans l'attente de votre réponse. Je vous remercie par avance.

     

    Un étudiant

    jeudi 12 juillet 2007 08:29
  • Pour éviter les conflits de noms de classe, le .NET utilise les espaces de nom.

     

    Pour faire simple il faut considérer les espaces de nom comme "des dossiers" et les classes comme "des fichiers".

    Exemple :

     

    Code Snippet

    namespace Alpha.Beta.Delta

    {

          public class Class1

          {

     

          }

    }

     

     

    Ici la classe se trouve dans l'espace de nom (ou dossier) Alpha.Beta.Delta. Sous .NET, on utilise toujours le nom complet des classes. Pour faire l'analogie aux fichiers, cela représente exactement le chemin complet d'un fichier.

     

    Ainsi votre classe se nomme Alpha.Beta.Delta.Class1 ET NON Class1.

     

    Le problème c'est qu'écrire du code comme ceci :

     

    Code Snippet

    Alpha.Beta.Delta.Class1 c;

    c = new Alpha.Beta.Delta.Class1();

     

     

    Est très lourd... Sous .NET il existe un mécanisme permettant d'utiliser les noms court en ajoutant la clause "using xxxxx".

    Contrairement à ce que peuvent penser beaucoup d'étudiant la clause using n'a aucun rapport avec un "#include en C".

     

    Ainsi tu peux écrire le code précédent comme ceci :

     

    using Alpha.Beta.Delta;

    ...

     

    Code Snippet

    namespace AutreEspaceNom

    {

    ...

    Class1 c;

    c = new Class1();

    ..

    }

     

     

    A la compilation le compilateur vas rechercher la classe "Class1" dans l'espace de nom AutreEspaceNom, s'il trouve pas il les recherche via les using placé en début de fichier. (Et si malgré tout le compilateur ne trouve aucune classe dans les espaces de nom spécifiés par les using, il te génère un message d'insulte...)

     

    Pour revenir à ton cas :

    Tes 2 Form dans les autres projets sont dans un espace de nom qui doit être différent de l'espace de nom de Form d'accueil... Tu dois donc ajouter un "using MonEspaceDeNom_DeMaForm1" au niveau de ta Form d'accueil ou instancier ta Form comme ceci :

     

    Code Snippet

    MonEspaceDeNom_DeMaForm1.Form1 f;

    f = new MonEspaceDeNom_DeMaForm1.Form1();

     

     

    Pour information : Mettre beaucoup d'using ne change rien à la vitesse d'execution de ton application... Car à la compilation se sont "les noms complet" des classes qui sont enregistrés. Les using sont uniquement utilisé par le compilateur...

    Aussi il faut penser que si tu fais :

     

    using Espace1;

    using Espace2;

     

    Et que dans chacun de ses espaces tu as une classe MaClasse, il faudra lors de la déclaration d'une variable de MaClasse spécifier explicitement l'espace de nom... Car le compilateur ne sait pas du tout quelle classe prendre !

     

    Cordialement

    samedi 14 juillet 2007 08:24
    Modérateur