Почему Visual Studio Designer удаляет код? - PullRequest
4 голосов
/ 02 марта 2010

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

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

Ответы [ 5 ]

12 голосов
/ 02 марта 2010

Хорошо, для начала прочитайте XML в верхней части вашего файла designer.cs.

/// <summary>
/// Required method for Designer support - do not modify
/// contents of this method with the code editor.
/// </summary>
private void InitializeComponent()

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

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

На самом деле ответ заключается в том, чтобы поместить код в другое место, например, в конструктор, перед вызовом метода InitializeComponent (). Если коллеги-разработчики не знают об этом, вы должны проинформировать их и проинформировать их о том, что файлы .designer.cs должны вызывать вопросы даже у новых разработчиков о том, почему странное расширение.

5 голосов
/ 02 марта 2010

Вы, ребята, не изменяете сгенерированные файлы кода, не так ли? Нравится MyForm.Designer.cs? Вот почему нам дали partial классы.

3 голосов
/ 02 марта 2010

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

0 голосов
/ 30 ноября 2017

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

Эта проблема, связанная с потерей строк кода в классе конструктора, существует с момента первоначального выпуска Visual Studio и вызывает у меня бесчисленные кошмары, потому что потеря произошла, возможно, за несколько недель до этого, когда программа была ранее изменена.

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

0 голосов
/ 02 марта 2010

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

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