webentwicklung-frage-antwort-db.com.de

Wie fügen Sie einem neuen Projekt ein vorhandenes Formular hinzu?

Ich konnte niemals erfolgreich eine Form aus einer vorhandenen Datei zu einem neuen Projekt hinzufügen.

Ich habe in einem Blog gelesen, dass Sie nur die * .cs-Datei hinzufügen, und die Abhängigkeiten kommen. Nun, ich habe es versucht und die Datei hat die * .designer- und * .resx-Dateien gezogen und zugeordnet. Das Formular-Symbol zeigt jedoch nicht an. Stattdessen sieht die Datei wie ein normales * .cs-Dateibild aus. Und wenn ich auf die Datei doppelklicke, bekomme ich den Code hinter dem Formularobjekt.

Ist es möglich, vorhandene Formulare hinzuzufügen und richtig zu erkennen?

36
P.Brian.Mackey

Nach weiteren Recherchen entdeckte ich die Quelle des Problems. Es ist richtig, dass nur die *.cs-Datei importiert werden muss. Der Vorbehalt liegt im Projekttyp. Wenn Sie in einem Class Library-Projekt arbeiten, muss ein weiterer Schritt ausgeführt werden.

  1. Fügen Sie einen Verweis auf System.Windows.Forms.dll und System.Drawing hinzu.
  2. Importieren Sie die *.cs-Datei

Anmerkungen: 

Antwort: Die Dateien werden erst richtig erkannt, nachdem ich diese Schritte ausgeführt und dann versucht habe, die Datei zu öffnen. Plötzlich "wacht VS" auf und repariert die Dateien.

B. Reihenfolge der Schritte spielt keine Rolle . Wenn Sie * .cs-Dateien bereits importiert haben, korrigieren Sie einfach die Verweise.

C. Wenn eine andere Referenz fehlt, z. DevExpress oder andere Drittanbieter-Kontrollimporte), werden die * .cs-Dateien nicht ordnungsgemäß angezeigt, bis dies behoben wurde.

27
P.Brian.Mackey

Sorry P.Brian.Mackey, Ihre Lösung hat bei mir nicht funktioniert. Es hat es verbessert, indem VS dazu gebracht wurde, zu erkennen, dass es sich um ein Formular und nicht um eine Codedatei handelt, d. H.

Ich konnte das Problem jedoch nur vollständig beheben, indem die csproj-Datei manuell in einem Texteditor bearbeitet wurde. Ich bin nicht wirklich überzeugt, dass dies eine großartige Lösung ist und potenziell ziemlich gefährlich sein kann, zumal ich zwei Tippfehler gemacht und das Projekt komplett gebrochen habe, aber es hat funktioniert, sobald ich es richtig verstanden habe. Es ist auch schwierig, die Fehler zu finden, z. B. das Schließen der Tags oder das Vergessen einer Datei.

Das Projekt begann also mit diesen Einträgen, nachdem die Dateien über 'Hinzufügen -> Vorhandenes Element' hinzugefügt wurden: (Ps: Ich bin mir sicher, dass Sie die Dateien nicht zuerst in die Projektordner kopieren müssen, sondern nur dorthin navigieren, wo sie gespeichert sind außerhalb des Projekts und VS kopiert sie in den Ordner, auf den Sie mit der rechten Maustaste geklickt haben. Vorab kopieren funktioniert natürlich auch.)

<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>

und weiter unten in der Datei:

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

Wenn Sie diese mit den vorhandenen Formularen im Projekt vergleichen, die ordnungsgemäß funktionierten (andere Option ist, wenn Sie keine haben, das Erstellen eines neuen Formulars in Visual Studio, und Sie erhalten die richtige Markierung, die Sie kopieren möchten) dass das DependentUpon-Tag die Unterdateien nicht der Hauptformularcodedatei zuordnet.

Also habe ich es von Hand bearbeitet, damit es passt:

<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>

Noch weiter unten in der Datei:

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

Es ist keine Lösung, die ich mag, aber es funktioniert. Wenn jemand bessere Lösungen hat, höre ich gerne zu.

19
Matthew Radford

Hier ist ein Ansatz, bei dem das Projekt nicht geschlossen und nicht erneut geöffnet wird :

  1. Fügen Sie die 3 vorhandenen Formulardateien hinzu (cs, Designer.cs und resx).
  2. Schließen Sie nun die 3 Dateien aus, die Sie gerade aus dem Projekt hinzugefügt haben.
  3. Öffnen Sie das Fenster Vorhandenen Artikelexplorer hinzufügen und wechseln Sie in Ihr Projektverzeichnis.
  4. Wählen Sie die CS-Datei und Hinzufügen.
  5. Tada alles gut
15
brenth

Sie können ein vorhandenes Formular in ein Projekt importieren. Welche Dateien importiert werden müssen, hängt von der Version von Visual Studio ab, mit der das Formular erstellt wurde.

Ich gehe davon aus, dass Sie zwei getrennte Projekte, Foo und Bar, in unterschiedlichen Lösungen haben:

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

und

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

Angenommen, Sie müssen das Formular Foo in die Projektleiste importieren. Zunächst müssen Sie alle Dateien, die zu Foo gehören, in den Bar-Projektordner kopieren:

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

Öffnen Sie dann Bar.sln in Visual Studio und klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Bar-Projekt. Wählen Sie [Vorhandenes Element hinzufügen] und wählen Sie im geöffneten Dialogfeld alle Dateien aus, die Sie für das Foo-Formular kopiert haben. Nach der Bestätigung sollte das neu importierte Formular im Projektmappen-Explorer korrekt angezeigt werden.

5
npclaudiu

Beim Aktualisieren von VisualBasic-Formularen, die von VisualStudio 2010 zu VisualStudio 2013 wechseln, sind gerade ähnliche Probleme aufgetreten. Es gibt zwei Möglichkeiten, vorhandene Elemente hinzuzufügen.

Problem: Wenn ich Hauptfenster-> Projekt-> Vorhandenes Element hinzufügen wähle und nur die Datei formname.vb abrufe, scheint das Ergebnis nur als Code zu interpretieren (kein Designer), es verweist auf die Originaldatei (anstatt eine Kopie zu erstellen) zum neuen Projekt) und hat andere Probleme. 

Lösung: Wenn ich stattdessen zum Fenster des Projektmappen-Explorers gehe, das Projekt (im Gegensatz zu den Objekten der unteren Ebene in der Baumstruktur) auswählen und dann mit der rechten Maustaste in das Fenster klicken, wird im angezeigten Menü Hinzufügen -> Vorhandenes Element angezeigt. Die Verwendung dieser Version funktioniert wie erwartet und erfordert nur das Auffinden der Datei formname.vb. Kein manuelles Kopieren von Dateien, kein Hinweis auf mehrere Dateien, keine Bearbeitungsskripte usw. Ich würde annehmen, dass dies auch für in C geschriebene Formulare gilt.

3
James

Sie benötigen tatsächlich 2 Dateien: - Form1.cs - Form1.Designer.cs

Kopieren - fügen Sie sie in Ihr neues Projekt ein (stellen Sie sicher, dass es kein Formular mit demselben Namen in einem neuen Projekt gibt)

2
Mitja Bonca

Vielleicht liegt es an der Verwendung von Visual Studio 2012, aber all diese Lösungen haben nicht funktioniert. Und dieser Hinweis hat funktioniert.

  1. Öffnen Sie die Projektmappe mit dem Projekt, zu dem Sie Ihre drei Dateien hinzufügen möchten.
  2. Angenommen, Sie möchten MyForm.cs/MyForm.Designer.cs und MyForm.resX hinzufügen. Stellen Sie sicher, dass sie sich im Ordner Ihres Projekts befinden
  3. Fügen Sie ein Dummy-Formular (oder eine Benutzerkontrolle) mit einem Dummy-Namen hinzu: MyTempForm.
  4. Speichern Sie die Lösung und schließen Sie sie in Developer Studio
  5. Löschen Sie in einem Windows-Explorer die drei MyTempForm-Dateien
  6. Benennen Sie Ihre drei MyForm-Dateien mit den gleichen Erweiterungen in MyTempForm um.
  7. Öffnen Sie Ihre Lösung erneut in Developer Studio 2012
  8. Stellen Sie sicher, dass Ihre MyForm jetzt vollständig als MyTempForm verfügbar ist
  9. Benennen Sie im Lösungs-Explorer MyTempForm wieder in MyForm um
1

Wenn Sie eine Bibliothek mit Windows-Formularen erstellen möchten, empfiehlt es sich, ein Windows Forms-Anwendungsprojekt zu erstellen. Löschen Sie anschließend das Standardformular (Form1), wechseln Sie zu den Projekteigenschaften und ändern Sie den Ausgabetyp (oder den Projekttyp) von Windows Forms Application in Class Library. 

Auf diese Weise wird die Ausgabe eine DLL sein, sie enthält jedoch die Referenzen, die Sie für ein Windows Forms-Projekt benötigen. Wie Sie bereits erwähnt haben, fügen Sie beim Hinzufügen vorhandener Elemente NICHT die entsprechenden .Designer- und .resx-Dateien hinzu, sondern fügen Sie nur die oberste Haupt-/Hauptdatei hinzu.

1
Lord of Scripts

Gehen Sie zum Lösungs-Explorer und klicken Sie mit der rechten Maustaste darauf, fügen Sie dann das vorhandene Element hinzu. Nun, und das ist wichtig: Auf der Seite, auf der Sie das vorhandene Formular verwenden möchten, müssen Sie die Header-Datei hinzufügen:

using "your existing project name";
1
agha

Nachdem ich mehrere Methoden ausprobiert hatte, war der einfachste Weg für mich die Verwendung einer vorhandenen WinForm: (ähnlich HaraldDuchs Antwort) und nur auf VS2013 getestet:

1) Bevor Sie Ihre vorhandene WinForm in den Quellordner des Zielprojekts verschieben, erstellen Sie eine Dummy-WinForm mit demselben Namen wie Ihre Quell-WinForm.

2) Schließen Sie Ihre VS-Lösung beim Speichern.

3) Löschen/Ersetzen Sie den neu erstellten Dummy-Satz von WinForm-Dateien (* .cs, * .Designer.cs und * .resx) aus dem Windows Explorer (aus VS IDE) durch die vorhandenen WinForm-Dateien, die Sie verwenden möchten.

4) Öffnen Sie VS, um Ihre vorhandene WinForm zu finden. Sie können sie in VS IDE umbenennen, wenn Sie möchten, und Sie müssen den Namensraum der alten WinForm an Ihr neues Projekt anpassen.

1
Prasa

Nach vielen Tests und fehlerhaftem Erkennen des Formulars beim Hinzufügen, obwohl .designer und .resx beim Importieren von .vb kopiert wurden, fand ich Vidars Lösung die beste, am wenigsten gehackte Lösung.

Wenn diese Verweise nicht bereits im Projekt vorhanden sind (falls noch keine Formulare vorhanden sind), wird das Formular offensichtlich nicht als Formular erkannt und stattdessen als Code-Modul importiert.

  • System.Drawing
  • System.Windows.Forms

Diese können entweder manuell hinzugefügt werden, oder Sie können es einfach

  1. Fügen Sie dem Projekt ein neues leeres Formular hinzu (dadurch werden die obigen Verweise automatisch hinzugefügt).
  2. Fügen Sie das vorhandene .vb/.cs-Formular hinzu, das Sie importieren möchten (es wird jetzt das Formularsymbol im Projektmappen-Explorer angezeigt und "View Designer" ist über den Kontext verfügbar.)
  3. Löschen Sie das leere Formular oder verwenden Sie es für etwas anderes

Dazu müssen Sie keine der VS-Konfigurationsdateien bearbeiten, wie in anderen Antworten auf die Frage gezeigt.

1
drewdqueue

Angenommen, Sie möchten ein Formular mit dem Namen YourFormName importieren. Dann sollten Sie nur YourFormName.cs zum Projekt hinzufügen - die restlichen Teile (YourFormName.designer.cs und YourFormName.resx) werden automatisch hinzugefügt.

schritte:

Erstellen Sie ein WinForms-Projekt (in meinem Fall .Net Framework ist 4.5.1) in VS2013 .__ Klicken Sie mit der rechten Maustaste auf Projekte -> Hinzufügen -> Vorhandenes Element ... Kopieren Sie die zu importierende Winform in den Ordner Ihres Projekts . Wenn Sie es zu einem neuen Ordner hinzufügen möchten, erstellen Sie zunächst einen Ordner und fügen Sie dann ..__ hinzu. Suchen Sie nach WinForm mit Steuerelementen (ich habe zwei in VS2010 für .NET Framework 4 erstellte Formulare hinzugefügt) In weniger als 10 Sekunden Studio fügte alle verbleibenden Dateien hinzu und ich kann diese im Designmodus öffnen.

1
ankur

Ziehen Sie .cs-Dateien per Drag & Drop aus dem Dateisystem in den Projektbaum im Projektmappen-Explorer (z. B.):

  • mainForm.cs
  • mainForm.Designer.cs

Vergessen Sie nicht die Referenzen, wenn es sich nicht um ein Windows Forms-Projekt handelt.

In meinem Fall habe ich auch festgestellt, dass ich jeweils nur ein Formular anzeigen kann. Sie werden die Formulare als separate Elemente sehen, wenn Sie versuchen, mehrere Formulare gleichzeitig hinzuzufügen.

0
brian

Sie können weiterhin "Vorhandenes iTem hinzufügen" verwenden.

  1. "Vorhandenes iTem hinzufügen", wählen Sie drei Dateien aus (.cs .resx .Designer.cs)

  2. stellen Sie sicher, dass "Namespace Application" in Ihrer CS-Datei mit dem Projekt übereinstimmt

  3. jetzt können Sie das soeben hinzugefügte Formular automatisch ausfüllen.

0
han ping chen

Fügen Sie einfach die Formulardatei (form.vb oder form.cs) hinzu. Andere Dateien werden automatisch erstellt.

0
Somasekar

Das hat gerade für mich funktioniert (ich habe das gleiche Problem wie du) .. 1. Erstellt eine neue Winform mit dem gleichen Namen, fügt etwas hinzu (damit die ResX-Datei erstellt wird), gespeichert und geschlossen .. 2. Ersetzen Sie neu erstellte Dateien durch Ihr Originalformular .. 3. Erledigt

0
Jan Macháček

In Visual Studio 2012 ist Folgendes erforderlich:

  1. Kopieren Sie die drei Dateien für das Formular in den Projektordner (.cs, .designer.cs und .resx).
  2. Gehen Sie zum Projekt und fügen Sie ein vorhandenes Objekt hinzu.
  3. Wählen Sie die CS-Datei aus
  4. Es wird importiert und sieht aus wie eine Standard-Codedatei. Ein Doppelklick darauf öffnet den Designer nicht wie oben erwähnt. Klicken Sie jedoch auf Alle Dateien speichern, schließen Sie das Projekt und öffnen Sie es erneut. Jetzt wird es als Formular erkannt und funktioniert ordnungsgemäß. 
0
Robb

Obwohl dies ein alter Beitrag ist, hatte ich genau das gleiche Problem wie @MatthewRadford oben beschrieben. Mein Workaround dafür war, nur die .CS-Datei hinzuzufügen (fügen Sie die .resx-Datei nicht hinzu) und erlauben Sie Visual Studio, die .resx-Datei direkt nach dem Hinzufügen der .cs-Datei automatisch zu erstellen.

Ich habe jedoch eine dauerhafte Lösung gefunden. Wenn dieses Problem unmittelbar nach dem Upgrade auf eine neue Version von Visual Studio auftrat, war es möglich, dass Active Reports während des Upgrades nicht ordnungsgemäß registriert wurde. Die Lösung besteht darin, Active Reports zu deaktivieren (mithilfe von GrapeCity License Manager), Active Reports zu deinstallieren, Active Reports von Grund auf neu zu installieren und die Lizenz erneut zu aktivieren. Sie sollten jetzt in der Lage sein, ReportName.cs und ReportName.resx sowie die Datei Designer.cs gleichzeitig hinzuzufügen, während Visual Studio ihre Abhängigkeiten korrekt verarbeitet.

0
Pavel

Die einfachste Lösung, die für mich funktioniert, ist

  1. Schließen Sie das Visual Studio, falls es geöffnet ist

  2. Kopieren Sie alle 3 Dateien (.cs, .designer.cs, .resx) in Ihren Projektordner, in dem sich auch alle anderen Formulare befinden.

  3. Öffnen Sie nun das Projekt mit Visual Studio.

  4. Bauen Sie das Projekt auf

  5. Öffnen Sie das Formular, indem Sie mit der rechten Maustaste darauf klicken und View Designer auswählen. Dadurch wird der richtige Designer.cs für das Formular generiert. Wenn Sie dies nicht tun, kann es zu einer Fehlermeldung kommen

InitializeComponent ist nicht im aktuellen Kontext vorhanden.

  1. Jetzt können Sie die .cs-Codedatei öffnen und bearbeiten

Das neue Formular wird im Lösungs-Explorer hier als normales Formular angezeigt.

0
Subbu