Kopieren einer Form im gleichen Projekt

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Skybird.

    Kopieren einer Form im gleichen Projekt

    Hi,

    ich habe ein VB Projekt, das die "frmA.vb" enthält.

    Nun möchte ich gern eine weitere "frmB.vb" hinzufügen. Diese Form ist der bereits bestehenden "frmA" sehr ähnlich. Deshalb würde ich gern die "frmA.vb" kopieren, um sie nachher anzupassen.

    Das habe ich im Designer versucht: Im Projektmappenexplorer habe ich die "frmA.vb" mit Strg-C in die Ablage kopiert und anschließend mit Strg-V ins Projekt eingefügt.

    Es erscheint auch ein neuer Eintrag: "Kopie von frmA.vb" und die kann ich auch in "frmB.vb" umbenennen.

    Nur wenn ich jetzt die "frmB.vb" durch Doppelklick öffnen will, erhalte ich die folgende Fehlermeldung:

    Die InitializeComponent-Methode konnte nicht verarbeitet werden. Der Parser hat den Fehler: "Beim Aufruf einer COM-Komponente wurde ein HRESULT E-FAIL Fehler zurückgegeben." zurückgegeben. Mögliche Fehler werden in der Aufgabenliste angegeben:

    bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender, EventArgs e)
    bei System.CodeDom.CodeMemberMethod.get_Statements()
    bei System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
    bei System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
    bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
    bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)

    Das sagt mir offen gestanden nix. Und ich weiß schon gar nicht wie ich das beheben soll.

    Wenigstens kann ich die neue "frmB.vb" aber löschen. :)

    Kann mir jemand sagen, wie ich eine Form richtig kopiere?

    LG
    Peter
    @Peter329
    - Öffne den Quelltext der kopierten Form
    - Der Klassenname der Form ist identisch mit dem der kopierten Form
    - In der Kopie den Namen nach Belieben abändern.
    - Das Angebot der Intellisense zum automatischen Umbenennen ignorieren
    - Dateinamen der kopierten Form anpassen

    Voila !!!

    Peter329 schrieb:

    Diese Form ist der bereits bestehenden "frmA" sehr ähnlich.
    Nicht kopieren, sondern nachnutzen.
    So kannst Du eine Form ableiten:

    VB.NET-Quellcode

    1. Public Class MeineForm
    2. Inherits Form1
    3. Public Sub New()
    4. MyBase.New()
    5. InitializeComponents()
    6. End Sub
    7. Private Sub InitializeComponents()
    8. End Sub
    9. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich gehe oft so vor:
    1. Form in anderen Ordner kopieren -> Kompiler-Fehler wegen Code-Doubletten
    2. kopierte Form ausblenden - Kompiler ist wieder froh
    3. Form-Dateinamen umbenennen, inklusive Klassen-Namen - Kompiler hilft dabei
    4. ausgeblendetes Form wieder einblenden -> Voila: 2 gleiche Forms, mit verschiedenen Namen
    Auf vier Views-Videos ist das glaub ab Film2 andauernd vorgeturnt
    Ja, unter 2017 klappt das so nicht mehr. Da muss man die drei Dateien des Forms im Windows-Explorer kopieren, mit Notepad++ die Klassennamen ändern und das Ding im VS einbinden.

    Wenn man ein Form immer wieder nutzen möchte, sollte man daraus eine Vorlage machen:
    In alten Studios unter "Datei - Vorlage exportieren", in 2017 unter Projekt zu finden.
    Am Ende kann man dann einfach "Elemente hinzufügen" und in der Auflistung befindet sich das eigene Form. In allen Projekten!

    Viele Grüße,
    Oliver
    @OliverSte
    Also, das Verfahren vaus Post#2 funktioniert nach wie vor, auch unter VS2017 Community:

    - Gewünschte Form kopieren, Compiler meckert
    - Öffne den Quelltext der kopierten Form
    - Der Klassenname der Form ist identisch mit dem der kopierten Form
    - In der Kopie den Namen nach Belieben abändern.
    - Das Angebot der Intellisense zum automatischen Umbenennen ignorieren
    - Desgleichen in der Designer-Datei der kopierten Form.
    - Dateinamen der kopierten Form anpassen

    Gehört bei mir zur gängigen Vorgehensweise.
    @us4711
    Ok, das hat jetzt auch bei mir geklappt. Frachmichjetzt, warum mir das gestern ständig um die Ohren geflogen ist ...

    - Original Strg+C, Strg+V
    - Original-Kopie umbenennen
    - Kopie anklicken, F7 (öffnet Code)
    - Namen der Klasse ändern: "Original" -> "Kopie" und Fenster schließen
    - Kopie.Designer.vb anklicken, Code wird automatisch angezeigt
    - Suche-Ersetze "Original" -> "Kopie" (4 Mal) und schließen.

    Wenn man sowas nur mal eben einmalig braucht, ist ein Template natürlich völlig überkandidelt.

    Viele Grüße,
    Oliver

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „OliverSte“ ()