28 votes

Diviser l'ancien code .NET en classe partielle de designer

Je travaille sur une ancienne base de code .NET qui contient tout le code du concepteur dans le même fichier que mon code (classes partielles).

Existe-t-il un mécanisme permettant de dire à Visual Studio 2008 de revenir en arrière et de remanier le code du concepteur dans un fichier de classe partielle X.designer.cs ?

28voto

Martín Marconcini Points 7420

Ce que je viens de faire était complètement manuel :

  1. Créer votre formulaire .Designer.cs
  2. Ajoutez-le à Visual Studio (clic droit, ajouter un élément existant).
  3. Ajouter le partiel à votre classe existante.
  4. Ajouter le espace de noms exactement comme dans le cs original à la votre formulaire .designer.cs
  5. À l'intérieur de cet espace de nom, ajoutez l'élément classe (n'oubliez pas d'inclure la définition partiel mot-clé). Ne pas ajouter l'héritage et/ou les interfaces à cette classe partielle dans Designer.cs.
  6. Une fois ceci fait, vous êtes prêt à couper y pâte les suivantes :

a) Retirer le composants que vous pourriez avoir dans votre Winform original. Si l'application était .NET 1.1, vous aurez quelque chose comme ceci :

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private Container components = null;

b) Ajouter un nouveau composants dans la classe Designer :

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

c) A moins que vous n'ayez spécifique la méthode dispose, c'est la norme. Si vous n'avez pas d'héritage de forme, je pense que base.Dispose peut être supprimé en toute sécurité :

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose( bool disposing )
    {
        if ( disposing && ( components != null ) )
        {
            components.Dispose();
        }
        base.Dispose( disposing );
    }

d) Copie tous le code à l'intérieur du #region Code généré par Windows Form Designer à la nouvelle classe Designer.cs.

e) Vous devez également copier tous les variables membres de tous vos objets (étiquettes, boîtes de texte, etc. que vous utilisez dans le concepteur).

Ça devrait être tout. Enregistrez et compilez.

N'oubliez pas qu'une classe partielle peut être répartie entre un nombre N de fichiers, mais tous doivent partager le MÊME espace de noms.

Cela en vaut-il la peine ? Eh bien, dans mon cas, j'ai eu un tas de énorme winforms avec des tonnes de code et de contrôles. VS2008 se traînait à chaque fois que je passais du/au concepteur. Cela a rendu la vue du code plus réactive. Je me souviens avoir dû attendre 3-5 secondes avant d'avoir un code réactif. Maintenant, il faut 1


UPDATE :

En effectuant les étapes 1 à 5 et en déplaçant un contrôle existant ou en ajoutant un nouveau contrôle, rien ne sera automatiquement déplacé vers la classe designer.cs. Les nouveaux éléments sont transférés dans la nouvelle classe Designer, mais les anciens éléments restent là où ils étaient, malheureusement.

Vous devez également fermer et rouvrez le fichier (après avoir ajouté/créé la classe partielle) pour que VS se dessine correctement dans le Designer ; si vous ne le faites pas, des formulaires vides peuvent être dessinés.

8voto

Haas Points 323

Si quelqu'un cherche encore une méthode automatisée pour le faire, il existe une macro VS. aquí qui fera le plus gros du travail pour vous.

Un très bel outil.

2voto

davidg Points 2994

J'ai eu de la chance avec l'application autonome gratuite DeCodEx (Designer Code Extractor).

DeCodeEx se charge dans un projet Visual Studio, détecte les fichiers WinForms et sépare automatiquement le code du concepteur du code original. .cs o .vb dans un nouveau fichier .designer.cs o .designer.vb fichier.

Pour les grands projets, c'est beaucoup plus facile que d'essayer de diviser manuellement les fichiers soi-même.

1voto

Cory Points 37551

Le fichier de solution est-il de l'ancien code .NET 2003/2005 ? J'ai essayé de faire ce dont vous parlez en utilisant l'assistant de conversion dans VS2008. Pendant la conversion, il devrait essayer d'analyser vos pages .aspx et de créer des fichiers de conception pour celles-ci. Le problème du générateur de concepteur est que ces anciennes pages .aspx sont si mal formées qu'elles ne peuvent tout simplement pas être analysées.

Je me suis rendu compte qu'essayer de convertir un vieux code ASP.NET en 2.0 ou 3.5 est, en soi, un grand projet. Je n'ai pas encore trouvé de moyen efficace de factoriser le code du concepteur à partir de l'ancien code existant, aussi je serais heureux d'apprendre une solution ici.

0voto

hcris Points 9359

Si c'est WinForms - j'ai un script PowerShell qui édite le projet et ajoute .designer.cs pour tous les formulaires/contrôles.

Il faudrait quand même déplacer le code du designer à la main (ou améliorer le script) - je n'avais que quelques formulaires et ça ne valait pas la peine d'ajouter ça aussi.

Je peux le rechercher et le poster si cela peut aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X