Создание во время выполнения исходного кода конструктора форм Visual Studio - PullRequest
6 голосов
/ 15 сентября 2010

Я занимаюсь рефакторингом программы, содержащей множество форм, созданных динамически из информации времени выполнения.

Чтобы снизить уровень сложности системы, я подумал написать отдельные файлы кода для каждой из этих форм.Поскольку форм много, я думаю о способе автоматизации процесса создания файлов исходного кода форм из данных, собранных во время выполнения.

Например, если у меня есть экземпляр времени выполненияформа с именем EditPeople, я хочу создать исходный код EditPeople.designer.cs, чтобы затем я мог редактировать форму в конструкторе форм Windows.это задание?

Ответы [ 3 ]

1 голос
/ 13 октября 2010

Я только что видел этот вопрос, для дальнейшего использования вы можете попробовать что-то вроде этого:

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

Вы можете использовать эту функцию так:Список всех элементов управления вы можете сделать что-то вроде этого:

foreach(Control ctrl in ReturnedCtrls)
{
   // Generate Designer Source using ctrl properties
   ctrl.Left
   ctrl.Top
   // etc...
}
0 голосов
/ 27 октября 2010

2 CodeCanvas - Ни за что.Reflector предоставляет вам класс, а задача состоит в том, чтобы сериализовать все экземпляры всех данных классов.Например, класс содержит код:

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

задача состоит в том, чтобы создать * .Designer.cs со следующим кодом:

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

, и это определенно не то, что дает вам рефлектор.

Сериализация CodeDom может помочь, но она действует по своим собственным правилам и вряд ли даст полный снимок формы.

0 голосов
/ 22 октября 2010

Если целью является воссоздание кода формы, я думаю, используя .net рефлектор http://www.red -gate.com / products / refleor / вместе с его дополнением FileDisassembler denisbauer.com/NETTools/FileDisassembler.aspx(Я не могу опубликовать более 1 гиперссылки :)) поможет вам быстро декомпилировать весь проект.

Вам не кажется?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...