2010-09-15 11 views
6

Ich Refactoring ein Programm enthält viele Formulare aus Laufzeitinformationen dynamisch erstellt.Laufzeit-Erstellung von Visual Studio Formular-Designer-Quellcode

Um den Komplexitätsgrad des Systems zu reduzieren, dachte ich daran, individuelle Code-Dateien für jede dieser Formen zu schreiben. Da die Formulare sind viele, denke ich für eine Möglichkeit, den Prozess der Erstellung der Formulare Quellcode-Dateien aus Daten zur Laufzeit zu sammeln.

z. Wenn ich eine Laufzeit-Instanz eines Formulars namens EditPeople habe, möchte ich den Quellcode von EditPeople.designer.cs erstellen, so dass ich dann das Formular im Windows Form Designer bearbeiten kann.

Wissen Sie, ob es ein Framework oder Werkzeug gibt, das diese Aufgabe vereinfachen kann?

+1

Link: http://www.oreillynet.com/windows/blog/2004/10/serializing_controls_to_an_ext.html –

+0

Vielen Dank. Ich werde versuchen, CodeDom-Objekte zum Schreiben von Quelldateien zu verwenden. –

+0

Haben Sie Glück, das zu lösen? CodeDom klingt wie mögliche Lösung, eine andere Sache zu suchen ist "Design-Time-Serialisierung" –

Antwort

1

Ich sah nur diese Frage, für die Zukunft Sie so etwas wie dies versuchen könnte:

List<Control> ReturnedCtrls = GetAllControls(MyForm.Controls); 

Die, wenn Sie eine Liste haben von allen:

public static List<Control> GetAllControls(IList ctrls) 
{ 
    List<Control> FormCtrls = new List<Control>(); 
    foreach (Control ctl in ctrls) 
    { 
     FormCtrls .Add(ctl); 
     List<Control> SubCtrls = GetAllControls(ctl.Controls); 
     FormCtrls .AddRange(SubCtrls); 
    } 
    return FormCtrls; 
} 

Sie diese Funktion wie folgt verwenden können Mit den Steuerelementen können Sie beispielsweise Folgendes tun:

0

Wenn die Absicht ist, die neu zu erstellen Formular-Code Ich denke, mit .net Reflektor http://www.red-gate.com/products/reflector/ zusammen mit seinem Addon FileDisassembler denisbauer.com/NETTools/FileDisassemblier.aspx (Ich kann nicht mehr als 1 Hyperlink :)) würde Ihnen helfen, das gesamte Projekt in kurzer Zeit zu dekompilieren.

Denkst du nicht?

0

2 CodeCanvas - Kein Weg. Reflector gibt Ihnen eine Klasse, während die Aufgabe darin besteht, alle Instanzen aller angegebenen Klassen zu serialisieren. Zum Beispiel Klasse enthält Code:

for(int i=0; i<2;i++){ 
Controls.Add(new Button()); 
} 

Aufgabe * .Designer.cs mit folgendem Code zu machen ist:

//... 
InitializeComponent() 
{ 
    //... 
    button1 = new Button(); 
    button2 = new Button(); 
    button3 = new Button(); 
    //... 
    this.Controls.Add(button1); 
    this.Controls.Add(button2); 
    this.Controls.Add(button3); 
} 
//... 

und das ist definitiv nicht das, was Reflektor gibt Ihnen.

CodeDom Serialisierung könnte den Trick machen, aber es handelt nach seinen eigenen Regeln und unwahrscheinlich würde den vollständigen Snapshot des Formulars geben.

Verwandte Themen