Конструктор Windows Forms не работает для определенной формы - PullRequest
3 голосов
/ 02 апреля 2011

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

У меня есть определенная форма, которая была создана с помощьюДизайнер Windows Forms Visual Studio 2010. До этой недели все работало нормально.Теперь, когда я делаю какие-либо изменения в форме, и дизайнер заново создает файл .designer.cs, все элементы привязки устанавливаются на «none», и все вызовы Controls.Add удаляются.Элементы управления все еще видны в конструкторе, но затем, когда я запускаю проект, все элементы управления становятся невидимыми (из-за отсутствия вызовов Controls.Add).Если я закрою и снова открою конструктор, форма будет пустой.

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

Ответы [ 5 ]

4 голосов
/ 02 апреля 2011

Конструктор уязвим к исключениям, которые вызываются кодом, выполняемым во время разработки.В том числе конструктор элементов управления и методов, таких как OnPaint (), OnResize () и так далее.Если у вас есть код, который не будет работать должным образом во время разработки, например, в зависимости от файла, находящегося в рабочем каталоге по умолчанию, для подключения к серверу dbase, и так далее, этот код может быть запущен с исключением.Сначала вы заметите экран сбоя, который выдает конструктор, и показ трассировки стека не часто полезен для диагностики причины, поскольку в нем есть много методов, которые являются внутренними для конструктора или сериализатора кода.Вторичный эффект заключается в том, что вы можете потерять содержимое в методе InitializeComponent (), когда происходит сбой сериализатора кода при попытке получить значение свойства для генерации кода для него.Что, несомненно, произошло в вашем случае, когда вы видите, что пропущены вызовы Controls.Add ().

Сохранение файла designer.cs после такого сбоя приводит к неприятностям.Восстановление ущерба может быть непростым делом, обычно лучше всего восстанавливать файлы исходного кода формы из вашей VCS.

3 голосов
/ 02 апреля 2011

Единственное место, где у меня были подобные проблемы с формами в прошлом, это если я удалил конструктор без параметров.Дизайнер не знает, как создать форму без конструктора без аргументов.

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

2 голосов
/ 02 апреля 2011

Лучший совет - также самый противоречивый совет: верните предыдущую версию из системы контроля версий.

Если это невозможно, вам придется заново создать форму с помощью дизайнера.

Никогда не трогайте дизайнерские файлы, если вы не знаете, что делаете.

Извините, что новое не лучше, чем это.

1 голос
/ 03 апреля 2011

Оказывается, что истинная основная причина - компиляция в режиме .NET 3.5, даже если дизайнер склонен к .NET 4.0.Он прекрасно работает при компиляции против .NET 4.0, но как только в .resx появятся ссылки на компоненты рисования «2.0.0.0» вместо «4.0.0.0», дизайнер сходит с ума.

0 голосов
/ 02 апреля 2011

Единственное решение - вручную добавить Controls.Add вызовы. Это часто случается со мной в Visual Studio 2008, когда я работаю с MenuStrips. Проблема все еще может присутствовать в 2010 году.

Или, как другие предложили, воссоздать форму.

...