2009-11-20 4 views
1

Est-il possible d'écrire un contrôle qui peut créer/modifier un fichier de code dans le même projet - (Dans le même sens que le concepteur de formulaire fonctionne). Je n'arrive pas à voir la création/modification de fichiers être gênante - mais je voudrais éviter que le fichier 'xyz ait été modifié - voulez-vous le recharger?' dialogue.Contrôle personnalisé générer du code au moment du design

Pour être honnête, je ne m'attends pas à ce que je peux sans écrire une prise ou quelque chose de similaire.

Répondre

0

C'est effectivement possible. Après le référencement EnvDTE

using EnvDTE; 


    var host = this.Container as IDesignerHost; 
    var dte = host.GetService(typeof(DTE)) as DTE; 
    var activeDoc = dte.ActiveDocument; 
    var project = activeDoc.ProjectItem.Collection.Parent as Project; 
    project.ProjectItems.AddFromFile("\\Test.cs"); 
0

Comme Plip dit, utiliser CodeDom et plus particulièrement - CodeDocSerialier. Voici un petit exemple:

[Serializer(typeof(MySerializer))] 
class MyControl : Control {} 

class MySerializer : CodeDomSerializer 
{ 
    public override object Serialize(IDesignerSerializationManager manager, object value) 
    { 
     CodeDomSerializer baseSerializer; 
     CodeStatementCollection statements; 
     CodeExpression targetObject; 

     if(manager == null || value == null) 
     { 
     return null; 
     } 

     baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(MyControl).BaseType, typeof(CodeDomSerializer)); 
     statements = baseSerializer.Serialize(manager, value) as CodeStatementCollection; 
     if(statements == null) 
     { 
     statements = new CodeStatementCollection(); 
     } 

     targetObject = GetExpression(manager, value); 
     if(targetObject != null) 
     { 
     // add 'myControl.Visible = true;' statement. 
     statements.Add(
      new CodeAssignStatement(
      new CodeFieldReferenceExpression(targetObject, "Visible"), 
      new CodePrimitiveExpression(true))); 
     } 
     return statements; 
    } 
} 
+0

Belle réponse, mais qu'est-ce qui se passe avec le spam à la fin? –

+0

Ce n'est pas un spam! C'est mon pied de page sur de nombreux développeurs sites (y compris très respectifs) et aucun d'entre eux ne le traite pas comme spam car il n'est pas intrusif et offensant. Je ne vous force pas à lire le texte après la ligne de délimitation. –

+0

ARM, vous ne vous faites aucune faveur. – Will

Questions connexes