Форма не будет сохранена после ее создания в EnvDTE - PullRequest
5 голосов
/ 04 марта 2011

Я создал надстройку Visual Studio, которая добавляет форму к существующему проекту в открытом решении.

Вот как я создаю форму:

string templatePath = sol.GetProjectItemTemplate("Form.zip", "csproj");
//sol is an EnvDTE80.Solution2

proj.ProjectItems.AddFromTemplate(templatePath, formName);
//proj is an EnvDTE.Project

После этогоЯ могу успешно получить ссылку на ProjectItem добавленной формы, затем я могу получить ссылку на System.Windows.Forms.Form, и с помощью этой ссылки я могу добавить кнопку в форму следующим образом:

Button btn = new Button();

btn.Text = "my funky button";
btn.Name = "newButton";
btn.Size = new Size(150, 23);
btn.Location = new Point(30, 30);

frmNewForm.Controls.Add(btn);
//frmNewForm is a System.Windows.Forms.Form

И затем кнопка успешно добавляется в форму:

enter image description here

Однако, когда я пытаюсь сохранить эту форму, она просто не сохранится.Я нажимаю кнопку [сохранить] в Visual Studio, она просто не становится серой.Даже если я нажму [Сохранить все], форма не будет сохранена.Затем я закрываю Visual Studio, снова открываю его и открываю проект, в который я добавил новую форму с помощью своего надстройки, а новой кнопки просто нет.Просто пустая форма.

Я даже пытался сохранить проект и решение программно с помощью следующего кода:

itemForm.Save(itemForm.Name);
//itemFrom is an EnvDTE.ProjectItem

proj.Save(proj.FullName);
//proj is an EnvDTE.Project

Я думал, что это произойдет, потому что экземплярVisual Studio, которую я использовал для тестирования моей надстройки, является отладочной и открывается сразу после запуска моей надстройки.Но я попытался использовать установленную надстройку (которая осталась автоматически после запуска), и проблема не исчезла.


Обновление
Я только что заметил двевещи:

1) кнопка появляется только на дизайне формы, и больше нигде.И он даже не позволяет мне выбрать его, чтобы увидеть его атрибуты.

Его имя не отображается в Intellisense, в списке объектов или даже в проектном документе формы.

В качестве теста я добавил кнопку вручную, и эту я могу выбрать и взаимодействовать с ней:

enter image description here

Что я могу получить, так это то, что янеправильно добавляешь кнопку.

Тогда новый вопрос о кнопке будет таким: Как я могу добавить новую кнопку в форму, созданную через EnvDTE, чтобы я мог взаимодействовать с ней во время разработки?

2) Пытаясь увидеть отличия от моей забавной кнопки и моей кнопки, добавленной вручную, я попытался сделать что-то, чего раньше не было, с помощью программно созданной формы: создать экземпляр и запустить его.

И вот как я это сделал:

MyFunkyForm frm = new MyFunkyForm ();
frm.Show();

Он мигает на экране (видимо, ни с одной из моих двух кнопок), и выполнение заканчивается.Даже если я попытаюсь что-то сделать с его Form_load, он будет выполнен, тогда форма мигает, и выполнение заканчивается (форма закрыта и отладка завершена), как если бы я вызвал метод Close ().

Тогда дополнительный вопрос будет следующим: пропустил ли я шаг при добавлении формы или я вообще не создаю его должным образом?

1 Ответ

1 голос
/ 04 марта 2011

вы добавляете форму в проект ac #, я думаю, вам не следует создавать экземпляр формы самостоятельно, как вы это сделали, но если вы хотите ее увидеть, вы должны выполнить приложение.

Я незнаю, как это сделать, никогда не пробовал себя, нашел это, надеюсь, это полезно:

http://www.mztools.com/articles/2006/mz2006016.aspx

...