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?
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.
System.Windows.Forms.dll
und System.Drawing
hinzu.*.cs
-DateiAnmerkungen:
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.
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.
Hier ist ein Ansatz, bei dem das Projekt nicht geschlossen und nicht erneut geöffnet wird :
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.
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.
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)
Vielleicht liegt es an der Verwendung von Visual Studio 2012, aber all diese Lösungen haben nicht funktioniert. Und dieser Hinweis hat funktioniert.
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.
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";
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.
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.
Diese können entweder manuell hinzugefügt werden, oder Sie können es einfach
Dazu müssen Sie keine der VS-Konfigurationsdateien bearbeiten, wie in anderen Antworten auf die Frage gezeigt.
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.
Ziehen Sie .cs-Dateien per Drag & Drop aus dem Dateisystem in den Projektbaum im Projektmappen-Explorer (z. B.):
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.
Sie können weiterhin "Vorhandenes iTem hinzufügen" verwenden.
"Vorhandenes iTem hinzufügen", wählen Sie drei Dateien aus (.cs .resx .Designer.cs)
stellen Sie sicher, dass "Namespace Application" in Ihrer CS-Datei mit dem Projekt übereinstimmt
jetzt können Sie das soeben hinzugefügte Formular automatisch ausfüllen.
Fügen Sie einfach die Formulardatei (form.vb oder form.cs) hinzu. Andere Dateien werden automatisch erstellt.
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
In Visual Studio 2012 ist Folgendes erforderlich:
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.
Die einfachste Lösung, die für mich funktioniert, ist
Schließen Sie das Visual Studio, falls es geöffnet ist
Kopieren Sie alle 3 Dateien (.cs, .designer.cs, .resx) in Ihren Projektordner, in dem sich auch alle anderen Formulare befinden.
Öffnen Sie nun das Projekt mit Visual Studio.
Bauen Sie das Projekt auf
Ö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.
Das neue Formular wird im Lösungs-Explorer hier als normales Formular angezeigt.