2010-09-15 14 views
6

Çalışma zamanı bilgilerinin dinamik olarak oluşturduğu çok sayıda formunu içeren bir programı yeniden yapılandırıyorum.Visual Studio form tasarımcısı kaynak kodunun çalışma zamanı oluşturulması

Sistemin karmaşıklık düzeyini azaltmak için, bu formların her biri için ayrı kod dosyaları yazmayı düşündüm. Formlar çok olduğu için, çalışma zamanında toplanan verilerden form kaynak kodu dosyalarının oluşturulma sürecini otomatikleştirmenin bir yolunu düşünüyorum.

E.g. EditPeople adlı bir formun bir çalışma zamanı örneğim varsa, EditPeople.designer.cs kaynak kodunu oluşturmak istiyorum, böylece formları Windows form tasarımcısı olarak düzenleyebilirim.

Bu görevi basitleştirebilecek bir çerçeve veya araç olup olmadığını biliyor musunuz? Eğer tüm bir listesi var olduğunda

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

: Böyle bu işlevi kullanabilirsiniz

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; 
} 

:

+1

Bağlantı: http://www.oreillynet.com/windows/blog/2004/10/serializing_controls_to_an_ext.html –

+0

Teşekkür ederiz. Kaynak dosyaları yazmak için CodeDom nesnelerini kullanmaya çalışacağım. –

+0

Bunu çözmede herhangi bir şans var mı? CodeDom olası bir çözüm gibi geliyor, aramak için başka bir şey "tasarım-zaman serileştirme" –

cevap

1

Sadece ileride başvurmak üzere böyle bir şey deneyebilirsiniz, bu soruyu gördü Bu gibi bir şey yapabilirsiniz kontrolleri:

foreach(Control ctrl in ReturnedCtrls) 
{ 
    // Generate Designer Source using ctrl properties 
    ctrl.Left 
    ctrl.Top 
    // etc... 
} 
0

Amaç yeniden oluşturmaksa Formun kodu ile birlikte kullanıyorum. yansıtıcı ile birlikte http://www.red-gate.com/products/reflector/ FileDisassembler denisbauer.com/NETTools/FileDisassembler.aspx (1'den fazla köprü gönderemiyorum :)) ile kısa sürede tüm projeyi derlemede size yardımcı olacaktır.

0

2 CodeCanvas - Hiçbir şekilde. Görev, verilen tüm sınıfların tüm örneklerini serileştirirken, size bir sınıf verir.

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

ve bu reflektör ne verir kesinlikle değil:

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

görev aşağıdaki kodla * .Designer.cs yapmaktır: Örneğin, sınıf kodu içeriyor.

CodeDom serileştirme işlemi hile yapabilir, ancak kendi kurallarına uygun davranır ve formun tam anlık görüntüsünü verir.

İlgili konular