2010-09-15 38 views
6

Tôi đang tái cấu trúc chương trình chứa rất nhiều dạng được tạo động từ thông tin thời gian chạy.Tạo thời gian chạy của mã nguồn thiết kế biểu mẫu Visual Studio

Để giảm mức độ phức tạp của hệ thống, tôi nghĩ nên viết từng tệp mã cho từng biểu mẫu này. Vì các biểu mẫu là rất nhiều, tôi đang nghĩ đến cách tự động hóa quá trình tạo các tệp mã nguồn biểu mẫu từ dữ liệu được thu thập trong thời gian chạy.

Ví dụ: nếu tôi có một thể hiện thời gian của một biểu mẫu có tên là EditPeople, tôi muốn tạo mã nguồn của EditPeople.designer.cs, để sau đó tôi có thể chỉnh sửa biểu mẫu trong trình thiết kế biểu mẫu windows.

Bạn có biết nếu có một số khung công cụ hoặc công cụ có thể đơn giản hóa tác vụ này không?

+1

Liên kết: http://www.oreillynet.com/windows/blog/2004/10/serializing_controls_to_an_ext.html –

+0

Cảm ơn bạn. Tôi sẽ cố gắng sử dụng các đối tượng CodeDom để ghi các tệp nguồn. –

+0

Bất kỳ may mắn nào khi giải quyết vấn đề này? CodeDom giống như giải pháp có thể, một thứ khác để tìm kiếm là "serialization thời gian thiết kế" –

Trả lời

1

Tôi chỉ thấy câu hỏi này, để tham khảo trong tương lai bạn có thể thử một cái gì đó như thế này:

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

Bạn có thể sử dụng chức năng này như sau:

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

Các khi bạn có một danh sách tất cả các điều khiển bạn có thể làm điều gì đó như sau:

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

Nếu có ý định tạo lại mã của biểu mẫu Tôi nghĩ rằng bằng cách sử dụng .net phản xạ http://www.red-gate.com/products/reflector/ cùng với addon FileDisassembler của nó denisbauer.com/NETTools/FileDisassembler.aspx (Tôi không thể đăng nhiều hơn 1 siêu liên kết :)) sẽ giúp bạn trong decompiling dự án đầy đủ trong thời gian ngắn.

Bạn có nghĩ vậy không?

0

2 CodeCanvas - Không có cách nào. Reflector cho bạn một class trong khi nhiệm vụ là serialize tất cả các instance của tất cả các class đã cho. Ví dụ, lớp chứa mã:

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

nhiệm vụ là làm cho designer.cs * với đoạn mã sau:

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

và đó chắc chắn không phải là những gì phản xạ mang đến cho bạn.

CodeDom serialization có thể thực hiện thủ thuật, nhưng nó hoạt động theo các quy tắc của riêng mình và không có khả năng sẽ cung cấp toàn bộ ảnh chụp nhanh.

Các vấn đề liên quan