Manuelle Bearbeitung der Datei * .designer.cs

8

Ich bin mir bewusst, dass die Datei .designer.cs Daten enthält, die vom visuellen Formular-Designer in Visual Studio generiert wurden. Allerdings habe ich einige zusätzliche Methoden, die ich auch in die Datei .designer.cs einfügen möchte, da diese für die Handhabung von Formularen auf niedrigerer Ebene verantwortlich sind (zum Beispiel Teile meines visuellen Zustandsmanagers).

Die Methode InitializeComponent in der Datei .designer.cs enthält einen Kommentar, der besagt, dass sie automatisch generiert wird und nicht vom Benutzer geändert werden sollte. Gilt diese Einschränkung nur für diese Methode oder sollte die .designer.cs -Datei überhaupt nicht vom Benutzer bearbeitet werden? Ich habe festgestellt, dass es unter anderem die Dispose() -Methode enthält, die der Benutzer vielleicht ändern möchte - was die erste Option nahelegt. Ich möchte jedoch sicher sein.

    
Spook 23.04.2013, 05:57
quelle

5 Antworten

10

Sie sollten niemals .designer.cs ändern. Zeitraum. Ihre Änderungen werden ohne Gnade überschrieben.

Update: Um etwas hilfreicher zu sein, enthält C # seit v3 (VS 2008) partielle Methoden, die viele Designer jetzt verwenden, um benutzerdefiniertes Verhalten zu implementieren.

    
dahlbyk 23.04.2013, 05:58
quelle
5

Diese Anweisung gilt für die gesamte Datei designer.cs. Der gesamte Code wird automatisch generiert.

Sie sollten in dieser Datei keine Änderungen vornehmen, da sie jederzeit neu erstellt werden kann ... das wird Ihre Methoden entfernen ...

Wenn Sie den Code von der Formularcodedatei getrennt halten möchten, schlage ich vor, eine andere Datei zu erstellen, die eine Teilklasse enthält, in die Sie alle diese Methoden einfügen können ...

Ich hoffe, es hilft ...

    
Virus 23.04.2013 06:02
quelle
4

Ich denke, die anderen Antworten vereinfachen sich zu sehr.

Zuerst stimme ich völlig zu, dass es fast immer eine schlechte Idee ist, eine .designer-Datei zu bearbeiten, aber es gibt ein paar Fälle, in denen ich das getan habe, ich fand es gut und richtig und wurde nicht verbrannt.

  1. Sagen Sie, ich erstelle eine Beschriftung und doppelklicke versehentlich. Designer erstellt eine Methode in meiner Hauptdatei .cs, die ich dann lösche:

    %Vor%

    Nun, jetzt wird der Code nicht erstellt, außer ich lösche auch folgendes aus meiner .designer-Datei:

    %Vor%
  2. Weniger wichtig ist die Reihenfolge, in der Dinge zu einem Formular oder Panel (oder Menü!) hinzugefügt werden, und es kann einfacher sein, diese Reihenfolge im Code zu ändern als in der Designer-GUI. Nach meiner Erfahrung greift VS 2010 immer darauf zurück, aktualisiert seine GUI-Informationen und zeichnet seine Vorschau neu. Denken Sie daran, sich auf die Add() -Methoden zu konzentrieren - die Reihenfolgevariablen sind im Allgemeinen nicht wichtig.

  3. Wenn Sie eine Eigenschaft festlegen, durch die eine Zeile zur .designer-Datei hinzugefügt wird, wird die Zeile schnell gelöscht, und Designer wird aktualisiert. Vielleicht ist es weiser / sicherer, die GUI zu verwenden, um die Eigenschaft zu ändern, aber ich denke, das Löschen der Zeile ist sauberer.

  4. Code, der nicht in dieser Region ist, #region Windows Form Designer generated code , wird nur einmal generiert. Es ist sicher, sich zu bewegen, und wie andere empfohlen haben ( Ссылка ), kann die Dispose(bool) -Methode tatsächlich verschoben werden viel Sinn, wenn Sie es ändern oder eine Dispose() Methode hinzufügen, die idealerweise neben Dispose(bool) sitzen sollte.

    %Vor%

DISCLAIMERS:

  1. Das heißt, ich habe nur VS 2010 Ultimate versucht; Ihr Kilometerstand kann von 1 bis 3 variieren, aber 4 sollte sicher sein, solange der .designer eine Teilklasse mit Dispose(bool) außerhalb von #region ist. Ich stelle auch sicher, dass die neueste gute Version einer .designer-Datei in das Quell-Repository übernommen wird, bevor Sie damit fertig werden.

  2. Wenn ich zugebe, mit dem Dispose(bool disposing) -Muster weiterzumachen, möchte ich diesen Ansatz nicht fördern. Es scheint gut Gründe zu einfach verwenden in den meisten Fällen Dispose() und nur mehr für nicht verwaltete Ressourcen welches in einem dedizierten Disposable-Objekt eins zu eins gekapselt ist.

Jon Coombs 28.02.2014 18:53
quelle
1

Wenn Sie Designer.cs in Ruhe lassen, können Sie nicht nur verhindern, dass Ihre Änderungen überschrieben werden, sondern auch anderen Entwicklern helfen, indem Sie sagen, dass nichts Unerwartetes daraus entstehen sollte. Davon abgesehen gibt es mindestens eine Ausnahme, die ich mir vorstellen kann und die vom Autor des Beitrags erwähnt wurde: Erweiterung der Methode Dispose() . Nach meinem Wissen wird dieser Code - einmal erzeugt - nicht überschrieben.

Meiner Meinung nach ist es jedoch eine viel bessere Lösung, die Dispose -Methode zu überschreiben und dann base.Dispose() aufzurufen, damit wir Designer.cs sauber lassen.

    
Lukasz Tracewski 23.04.2013 06:25
quelle
0

Partielle Designer-Formularklasse, die von Visual Studio zum Platzieren des gesamten Codes verwendet wird, um das Steuerelement zu erstellen.

Die Methode InitializeComponent () kann nicht überschrieben werden: sie wird vom Designer-Editor zum Rendern einer Vorschau Ihres Formulars verwendet! Probieren Sie ein neues Projekt aus: Ändern Sie die Größe Ihres Formulars, fügen Sie eine Beschriftung und eine Schaltfläche hinzu und benennen Sie die InitializeComponent () -Methode um, und kompilieren Sie sie erneut. Dein Formular zurück auf Standardgröße!

Wenn Sie den Code beim Laden des Formulars aufrufen müssen, überschreiben Sie einfach die virtuelle Methode OnLoad (), wenn Sie den Code per Formular aufrufen müssen, um die einfache OnShown () - Methode zu überschreiben.

Denken Sie daran, base.Method () am Anfang der Überschreibung aufzurufen.

Ich hoffe, dass meine kleine Erfahrung helfen kann!

    
T-moty 23.04.2013 06:16
quelle

Tags und Links