web-dev-qa-db-fra.com

Comment ajouter un formulaire existant à un nouveau projet?

Je n'ai jamais réussi à ajouter une Form à partir d'un fichier existant à un nouveau projet.

J'ai lu sur un blog que vous ajoutez uniquement le fichier * .cs et que les dépendances entrent en jeu. Eh bien, j'ai essayé ceci et le fichier a été déplacé et associé aux fichiers * .designer et * .resx. Mais, l'icône de formulaire n'affiche pas. Au lieu de cela, le fichier ressemble à une image de fichier * .cs normale. Et lorsque je double-clique sur le fichier, le code se trouve derrière à la place de l'objet de formulaire.

Est-il possible d'ajouter des formulaires existants et les faire reconnaître correctement?

36
P.Brian.Mackey

Après quelques recherches supplémentaires, j'ai découvert la source du problème. Il est exact que tout ce que l’on doit importer est le fichier *.cs. La mise en garde réside dans le type de projet. Si vous travaillez dans un projet de bibliothèque de classes, vous devez effectuer une autre étape.

  1. Ajoutez une référence à System.Windows.Forms.dll et System.Drawing.
  2. Importer le fichier *.cs

Remarques: 

A. Les fichiers ne sont correctement reconnus qu'après avoir suivi ces étapes, puis essayé d'ouvrir le fichier. Soudain, VS "se réveille" et corrige les fichiers.

B. L'ordre des étapes n'a pas d'importance . Si vous avez déjà importé des fichiers * .cs, corrigez simplement les références.

C. S'il manque l'une des références, par exemple DevExpress ou d’autres importations de contrôles tiers), les fichiers * .cs ne s’afficheront pas correctement tant que cela n’aura pas été résolu.

27
P.Brian.Mackey

Désolé P.Brian.Mackey, votre solution n'a pas fonctionné pour moi. Cela a été amélioré en obligeant VS à reconnaître qu’il s’agissait d’un formulaire plutôt que d’un fichier de code, c’est-à-dire qu’il s’agissait d’une icône (imaginez-le ajouté du formulaire).

Mais le seul moyen de résoudre complètement le problème était de modifier le fichier csproj manuellement dans un éditeur de texte. Je ne suis pas vraiment convaincu qu'il s'agisse d'une solution géniale et potentiellement très dangereuse, surtout si j'ai commis deux erreurs de frappe et cassé complètement le projet, mais cela a fonctionné une fois que j'ai bien compris les choses. Il est également difficile de trouver les erreurs telles que ne pas fermer correctement les balises ou oublier une extension de fichier.

Ainsi, le projet a démarré avec ces entrées après avoir ajouté les fichiers via "Ajouter -> Élément existant": (PS, je suis certain que vous n'avez pas besoin de copier les fichiers dans les dossiers du projet, il vous suffit de naviguer jusqu'à leur emplacement de stockage. en dehors du projet et VS les copiera dans le dossier sur lequel vous avez cliqué avec le bouton droit de la souris. Une copie à l’avance fonctionne également.)

<Compile Include="Reports\GBudget1Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs" />
<Compile Include="Reports\GBudget2Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs" />
<Compile Include="Reports\LASHForm.cs">
  <SubType>Form</SubType>
</Compile>

et plus bas dans le fichier:

<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />

En les comparant aux formulaires existants dans le projet qui fonctionnaient correctement (une autre option consiste à créer un nouveau formulaire dans Visual Studio si vous n'en avez pas, ce qui vous donnera le balisage correct à copier). J'ai découvert que la balise DependentUpon n'associe pas les sous-fichiers au fichier de code de formulaire principal.

Alors je l'ai édité à la main pour correspondre à:

<Compile Include="Reports\GBudget1Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs">
   <DependentUpon>GBudget1Report.cs</DependentUpon>
</Compile>
<Compile Include="Reports\GBudget2Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs">
   <DependentUpon>GBudget2Report.cs</DependentUpon>
</Compile>

Encore une fois plus bas dans le fichier:

<EmbeddedResource Include="Reports\GBudget1Report.resx">
  <DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
  <DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>

Ce n’est pas une solution que j’aime bien, mais ça marche. Si quelqu'un a de meilleures solutions, je suis heureux de vous écouter.

19
Matthew Radford

Voici une approche qui ne consiste pas à fermer et à rouvrir le projet}:

  1. Ajoutez les 3 fichiers de formulaire existants (cs, Designer.cs et resx).
  2. Maintenant, excluez les 3 fichiers que vous venez d'ajouter au projet.
  3. Ouvrez la fenêtre Ajouter un élément existant et accédez au répertoire de votre projet.
  4. Sélectionnez le fichier cs et ajoutez.
  5. Tada. tout bon
15
brenth

Vous pouvez importer un formulaire existant dans un projet. Les fichiers à importer dépendent de la version de Visual Studio utilisée pour créer le formulaire.

Je suppose que vous avez deux projets distincts, Foo et Bar, dans des solutions différentes:

C:\
    Projects\
        Foo\
            Foo.sln
            Foo.vcproj
            Program.cs
            Foo.cs
            Foo.Designer.cs
            Foo.Designer.resx

et

C:\
    Projects\
        Bar\
            Bar.sln
            Bar.vcproj
            Program.cs
            Bar.cs
            Bar.Designer.cs
            Bar.Designer.resx

Supposons maintenant que vous devez importer le formulaire Foo dans la barre de projet. Tout d’abord, vous devez copier tous les fichiers qui accompagnent Foo dans le dossier du projet Bar:

C:\
    Projects\
        Bar\
            Bar.sln
            Bar.vcproj
            Program.cs
            Bar.cs
            Bar.Designer.cs
            Bar.Designer.resx
            Foo.cs
            Foo.Designer.cs
            Foo.Designer.resx

Ensuite, ouvrez Bar.sln dans Visual Studio et cliquez avec le bouton droit sur le projet Bar dans l'Explorateur de solutions. Sélectionnez [Ajouter un élément existant] et sélectionnez tous les fichiers que vous avez copiés pour le formulaire Foo dans la boîte de dialogue ouverte. Après confirmation, vous devriez voir le formulaire nouvellement importé correctement dans l'Explorateur de solutions.

5
npclaudiu

Je viens de rencontrer des problèmes similaires lors de la mise à niveau de formulaires VisualBasic, allant de VisualStudio 2010 à VisualStudio 2013. Il semble y avoir deux façons d'ajouter des éléments existants.

Problème: Si je choisis Fenêtre principale-> Projet-> Ajouter un élément existant et que je ne récupère que le fichier nomformulaire.vb, le résultat semble être interprété comme un code uniquement (pas de concepteur), pointe sur le fichier d'origine (plutôt que de prendre une copie. au nouveau projet) et a d’autres problèmes. 

Solution: si au lieu de cela, je vais dans la fenêtre de l'Explorateur de solutions, sélectionnez le projet (par opposition aux objets de niveau inférieur de l'arborescence), puis cliquez avec le bouton droit de la souris dans la fenêtre. Le menu résultant propose Ajouter -> Elément existant. L'utilisation de cette version fonctionne comme prévu, ne nécessitant que la localisation du fichier formname.vb. Pas de copie manuelle de fichiers, pas de pointage sur des fichiers multiples, pas de scripts d'édition, etc. Je suppose qu'il en va de même pour les formulaires écrits en C.

3
James

Vous avez en fait besoin de 2 fichiers: - Form1.cs - Form1.Designer.cs

Copier - collez-les dans votre nouveau projet (assurez-vous simplement qu’un tel formulaire portant le même nom existe déjà dans le nouveau projet)

2
Mitja Bonca

C’est peut-être à cause de Visual Studio 2012, mais toutes ces solutions ne fonctionnaient pas . AtConway a donné l’allusion de modifier le fichier csproj. Et cet indice a fonctionné.

  1. Ouvrez la solution avec le projet auquel vous souhaitez ajouter vos trois fichiers.
  2. Supposons que vous souhaitiez ajouter MyForm.cs/MyForm.Designer.cs et MyForm.resX. Assurez-vous qu'ils sont dans le dossier de votre projet
  3. Ajoutez un formulaire factice (ou un contrôle utilisateur) avec un nom factice: MyTempForm.
  4. Enregistrez la solution et fermez-la dans Developer Studio.
  5. Dans un Windows Explorer, supprimez les trois fichiers MyTempForm.
  6. Renommez vos trois fichiers MyForm dans MyTempForm, avec les mêmes extensions.
  7. Ouvrez à nouveau votre solution dans Developer Studio 2012.
  8. Voir que votre MyForm est maintenant entièrement disponible en tant que MyTempForm
  9. Dans l'explorateur de solutions, renommez MyTempForm en MyForm.
1
Harald Coppoolse

Si vous souhaitez créer une bibliothèque de formulaires Windows, il est préférable de créer un projet d'application Windows Forms. Supprimez ensuite le formulaire par défaut (Form1), accédez aux propriétés du projet et modifiez le type de sortie (ou type de projet) de l'application Windows Forms à la bibliothèque de classes. 

De cette façon, le résultat sera un DLL, mais il contiendra les références dont vous avez besoin pour un projet Windows Forms. Comme vous l'avez fait remarquer, lors de l'ajout d'éléments existants, N'Ajoutez PAS les fichiers .Designer et .resx correspondants, mais simplement leur fichier de niveau supérieur/principal.

1
Lord of Scripts

Accédez à l'explorateur de solutions et cliquez dessus avec le bouton droit de la souris, puis ajoutez un élément existant. Sélectionnez ici le chemin du formulaire existant. Maintenant, et c'est important, sur la page où vous voulez utiliser le formulaire existant, vous devez ajouter un fichier d'en-tête:

using "your existing project name";
1
agha

Après avoir essayé plusieurs méthodes, la méthode la plus simple pour moi d’utiliser un fichier WinForm existant s’est révélée être: (semblable à la réponse de HaraldDuch) et n’a été testée que sur VS2013:

1) Avant de déplacer votre WinForm existant vers le dossier source du projet de destination, créez un WinForm factice utilisant le même nom que votre source WinForm.

2) Fermez votre solution VS lors de la sauvegarde.

3) Supprimez/remplacez le jeu factice nouvellement créé de fichiers WinForm (* .cs, * .Designer.cs et * .resx) à partir de l'Explorateur Windows (hors VS IDE) par les fichiers WinForm existants à utiliser.

4) Ouvrez VS pour trouver votre WinForm existant et vous pouvez le renommer IDE si vous le souhaitez et vous devrez modifier l’espace de nom de l’ancien WinForm pour qu’il corresponde à votre nouveau projet.

1
Prasa

Après avoir effectué de nombreux tests et échoué à reconnaître correctement le formulaire lorsqu’il a été ajouté, même si .designer et .resx étaient en train de les copier au moment de l’importation de .vb, j’ai trouvé la solution de Vidar le meilleur correctif, le moins efficace.

Il semble que si ces références ne figurent pas déjà dans le projet (s'il n'y a pas encore de formulaires), le formulaire n'est pas reconnu en tant que formulaire et est importé en tant que module de code.

  • System.Drawing
  • System.Windows.Forms

Ceux-ci peuvent être ajoutés manuellement par leur solution ci-dessus, ou vous pouvez simplement

  1. Ajouter un nouveau formulaire vierge au projet (cela ajoute automatiquement les références ci-dessus)
  2. Ajoutez le formulaire existant .vb/.cs que vous souhaitez importer (l'icône du formulaire apparaît maintenant dans l'explorateur de solutions et le "Concepteur de vues" sera disponible à partir du contexte)
  3. Supprimer le formulaire vierge ou l'utiliser pour autre chose

Cela ne nécessite aucune modification des fichiers de configuration VS, comme indiqué dans les autres réponses à la question.

1
drewdqueue

Supposons que vous souhaitiez importer un formulaire appelé YourFormName. Ensuite, vous ne devriez ajouter que YourFormName.cs au projet - les parties restantes (YourFormName.designer.cs et YourFormName.resx) seront ajoutées automatiquement.

pas:

Créez un projet WinForms (dans mon cas .Net Framework version 4.5.1) dans VS2013 Cliquez avec le bouton droit de la souris sur les projets -> Ajouter -> Article existant ... Copiez le formulaire que vous souhaitez importer dans le dossier de votre projet. . Si vous souhaitez l'ajouter à un nouveau dossier, créez d'abord un dossier puis ajoutez . Recherchez tout WinForm avec des contrôles (j'ai ajouté deux formulaires créés dans VS2010 for .NET Framework 4) En moins de 10 secondes (visuel). studio a ajouté tous les fichiers restants et je peux l'ouvrir en mode création.

1
ankur

Faites glisser et déposez les fichiers .cs du système de fichiers dans l'arborescence du projet dans l'Explorateur de solutions (par exemple):

  • mainForm.cs
  • mainForm.Designer.cs

N'oubliez pas les références s'il ne s'agit pas d'un projet Windows Forms.

0

Dans mon cas, j'ai également noté que je ne pouvais ajouter qu'un formulaire à la fois. Vous pourrez voir les formulaires en tant qu'éléments distincts si vous essayez d'ajouter plusieurs formulaires en même temps.

0
brian

Vous pouvez toujours utiliser "Ajouter un iTem existant"

  1. "Ajouter un fichier existant", sélectionnez trois fichiers (.cs .resx .Designer.cs)

  2. assurez-vous que "namespace Application" dans votre fichier .cs est identique au projet

  3. vous pouvez maintenant utiliser la saisie automatique du formulaire que vous venez d'ajouter.

0
han ping chen

Ajoutez simplement le fichier de formulaire (form.vb ou form.cs). Les autres fichiers seront créés automatiquement.

0
Somasekar

Cela a fonctionné pour moi tout à l'heure (j'ai le même problème que vous) . 1. Crée un nouveau formulaire avec le même nom, ajoute quelque chose (afin que le fichier resx soit créé), enregistre et ferme .. 2. Remplacez les fichiers nouvellement créés par votre formulaire d'origine . 3. Terminé

0
Jan Macháček

Tout ce dont vous avez besoin dans Visual Studio 2012 est le suivant:

  1. Copiez les trois fichiers du formulaire dans le dossier du projet (.cs, .designer.cs et .resx).
  2. Accédez au projet et ajoutez un objet existant.
  3. Sélectionnez le fichier .CS
  4. Il importera et ressemblera à un fichier de code standard. Double-cliquer dessus n'ouvrira pas le concepteur mentionné ci-dessus. Cependant, il suffit de cliquer sur enregistrer tous les fichiers, puis de fermer et de rouvrir le projet. Il est maintenant reconnu comme un formulaire et fonctionne correctement. 
0
Robb

Bien que ce soit un ancien post, j'avais exactement le même problème que celui décrit par @MatthewRadford ci-dessus. Ma solution de contournement consistait à ajouter uniquement le fichier .CS (ne pas ajouter le fichier .resx) et à permettre à Visual Studio de générer automatiquement le fichier .resx juste après l'ajout du fichier .cs.

Cependant, j'ai trouvé une solution permanente . Si vous rencontrez ce problème immédiatement après la mise à niveau vers une nouvelle version de visual studio, il est possible que Active Reports n’ait pas été enregistré correctement lors de la mise à niveau. La solution consiste à désactiver vos rapports actifs (à l'aide de GrapeCity License Manager), à désinstaller Active Reports, à réinstaller Active Reports à partir de zéro et à réactiver votre licence. Vous devriez maintenant pouvoir ajouter les noms ReportName.cs et ReportName.resx, ainsi que le fichier Designer.cs, en même temps, tout en laissant Visual Studio gérer correctement leurs dépendances.

0
Pavel

La solution la plus simple qui fonctionne pour moi est,

  1. Fermer le studio visuel s'il est ouvert

  2. Copiez tous les 3 fichiers (.cs, .designer.cs, .resx) dans le dossier de votre projet où résident tous les autres formulaires.

  3. Ouvrez maintenant le projet en utilisant Visual Studio.

  4. Construire le projet

  5. Ouvrez le formulaire en cliquant dessus avec le bouton droit de la souris et en sélectionnant le concepteur de vues, cela générera le fichier designer.cs correspondant au formulaire. Si vous ne le faites pas parfois, cela pourrait donner une erreur en disant

InitializeComponent n'existe pas dans le contexte actuel.

  1. Maintenant, vous pouvez ouvrir et éditer le fichier de code .cs

Le nouveau formulaire apparaîtra comme un formulaire normal dans l'explorateur de solution ci-après.

0
Subbu