2010-02-09 5 views
3

Je veux créer un formulaire .NET au moment de l'exécution, ajouter des boutons et d'autres contrôles à cela (aussi à l'exécution), puis être en mesure de générer un fichier something.designer.cs à partir de ce formulaire (qui peut ensuite être ajouté à un Solution C# et compilé).Comment sérialiser un contrôle .NET dans CODE?

Ce que je veux faire est très similaire à ce que fait le concepteur WinForm. Mais au lieu d'avoir une interface glisser/déposer pour l'utilisateur, je veux créer dynamiquement le formulaire/contrôles moi-même au moment de l'exécution.

Je pensais pouvoir réutiliser ce que fait le concepteur WinForm.

Est-ce possible?

+4

Mon cerveau souffre de récursion à la suite de cette question –

+3

On ne sait pas ce que vous voulez. Essayez de donner un exemple spécifique de la façon dont vous voyez cela fonctionner. –

+0

il veut prendre un type d'exécution et le faire poinçonner Form form1 = new Form(); form1.Width = 800; form1.Hauteur = 600; –

Répondre

7

Cette MSDN magazine article devrait avoir tout ce dont vous avez besoin.

+1

parfait "ne pas réinventer la roue" réponse;) –

0

Ce n'est vraiment pas aussi simple que c'était pre-.NET car la version visuelle du formulaire que vous voyez dans Visual Studio est en fait le résultat de plusieurs fichiers.

Mais dans la forme la plus simple, vous pouvez simplement refléter exactement ce que .NET fait au début de la création d'une nouvelle forme:

  1. Créer trois fichiers Form.cs, Form.Designer.cs et Form.resx (qui est un fichier XML).
  2. Placez le même contenu par défaut dans ceux qui VS ne
  3. Mimic le code généré lors de l'ajout de contrôle, code-behind et des ressources

Ce sera une tâche fastidieuse, mais il peut être fait. L'ajout de ressources sera toutefois fastidieux.

0

Oui, vous pouvez le faire en utilisant Compiler Services (compilation du code C#) ou Emit si vous connaissez la construction correcte de MSIL.

+0

Ceci est la réponse directe. Mais j'ai l'impression que la question que vous posez concerne un obstacle sur votre chemin pour résoudre un problème différent que je ne connais pas. –

+0

Je suppose que vous avez une raison de réinventer la roue. –

+0

En outre, vous pouvez envisager de sérialiser un graphique de contrôles d'interface utilisateur dans un format personnalisé et de le recréer pendant l'exécution. –

Questions connexes