Конструктор форм Visual Studio 2019 не открывается

Обновлено: 20.11.2024

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

Немного истории

Где мы сегодня?

Взгляд внутрь конструктора WinForms

Проектирование форм и пользовательских элементов управления с помощью конструктора WinForms преподносит пару сюрпризов тем, кто впервые заглянет под капот конструктора:

Поведение SplitContainer во время разработки реализуется в связанном конструкторе, в данном случае `SplitContainerDesigner`. Этот класс предоставляет ключевые функции для взаимодействия с элементом управления `SplitContainer` во время разработки:

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

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

Войдите на сервер DesignTools

Пользовательские дескрипторы свойств и управляющие прокси

Таким образом, нажатие кнопки в форме приводит к следующей (несколько упрощенной) цепочке событий для отображения свойств в обозревателе свойств:

  1. Щелчок мыши происходит в специальном окне процесса Visual Studio, называемом Защита ввода. Если хотите, он действует как защита от чихания и предназначен исключительно для перехвата сообщений мыши, которые он отправляет. в процесс DesignToolsServer.
  2. DesignToolsServer получает щелчок мыши и передает его службе поведения. Служба поведения находит элемент управления и передает его службе выбора, которая выполняет необходимые действия для выбора этого элемента управления.
  3. В этом процессе Behavior Service также находит соответствующий Конструктор элементов управления и инициирует необходимые действия, позволяющие этому конструктору элементов управления отображать все декоративные элементы и глифы, необходимые для этого элемента управления. Вспомните глифы действий конструктора или специальные маркеры выделения из предыдущего примера с панелью SplitPanel.
  4. Служба выбора сообщает о выборе элемента управления обратно в службу выбора Visual Studio.
  5. Visual Studio теперь знает, какой прокси-объект сопоставлен с выбранным элементом управления в DesignToolsServer. Служба выбора Visual Studio выбирает этот прокси-объект. Это снова запускает обновление значений выбранного элемента управления (прокси-объекта) в обозревателе свойств.
  6. Обозреватель свойств, в свою очередь, теперь запрашивает дескрипторы свойств выбранного прокси-объекта, которые сопоставляются с дескрипторами прокси фактического элемента управления в процессе DesignToolsServer. Таким образом, для каждого свойства, которое Браузер свойств должен обновить, Браузер свойств вызывает GetValue для соответствующего дескриптора прокси-свойства, что приводит к межпроцессному вызову сервера для получения фактического< /em> значение свойства этого элемента управления, которое в конечном итоге отображается в обозревателе свойств.

Совместимость пользовательских элементов управления с DesignToolsServer

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

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

Функции, которые еще не реализованы и упразднены.

Обзор и основные выводы

Дайте нам знать, какие темы вы хотели бы услышать от нас по WinForms Designer — новые функции Object Data Source в OOP Designer и WinForms Designer SDK — это темы, которые уже находятся в разработке и находятся в начале нашего списка.

Отвечает:

Вопрос

Недавно я создал приложение для Windows и сохранил решение на диске Jump Drive. Теперь, когда я открываю решение, я не вижу представление дизайна приложения. Как посмотреть дизайн? Приложение появляется, когда я запускаю отладчик. Спасибо!

Кроме того, в другом решении я пытаюсь использовать функцию ToLower.

Я хочу, чтобы буквы, написанные в моем текстовом поле, переводились в нижний регистр, когда я нажимаю кнопку "Вниз", которую я создал. Когда я запускаю программу, я печатаю прописные буквы в своем текстовом поле, нажимаю кнопку «Вниз», и я получаю ответ «form1». То же самое происходит с моей функцией ToUpper, где я получаю ответ «FORM1». Что я делаю не так?

Ответы

Если вы просматриваете код, Shift-F7 должен показать конструктор.

Кроме того, в обозревателе решений щелкните правой кнопкой мыши форму и выберите View Designer.

Если это не сработает, убедитесь, что у вас есть определение класса в файле кода формы, обычно это Form1.vb. У вас должен быть открытый класс Form1. Конец класса там для дизайнера, чтобы показать.

Для текстовой проблемы: простое использование текста приведет к доступу к текстовому свойству формы, которое по умолчанию равно "Form1" - отсюда и ваш результат. Попробуйте:

Все ответы

Если вы просматриваете код, Shift-F7 должен показать конструктор.

Кроме того, в обозревателе решений щелкните правой кнопкой мыши форму и выберите View Designer.

Если это не сработает, убедитесь, что у вас есть определение класса в файле кода формы, обычно это Form1.vb. У вас должен быть открытый класс Form1. Конец класса там для дизайнера, чтобы показать.

Для текстовой проблемы: простое использование текста приведет к доступу к текстовому свойству формы, которое по умолчанию равно "Form1" - отсюда и ваш результат. Попробуйте:

Я искал ответ на этот вопрос пару дней и только что наткнулся на него, поэтому решил поделиться со следующим человеком :)

Я преподаю в классе, где мы используем VB в VS 2010, и случаи, которые я видел, происходят, когда учащийся меняет имя формы после добавления кода и/или используйте кнопку «Сохранить», а не «Сохранить все». Это приводит к рассинхронизации некоторых файлов.

В этом случае вы можете открыть файл Application.Designer.vb в Блокноте (он находится в папке «Мой проект» для вашего файла). Найдите строку внизу, которая выглядит следующим образом:

Если строка точно такая же, как указано выше, ваш проект должен называться WindowsApplication1, а главная форма должна быть Form1.vb

Получив эту информацию, откройте свое решение в VS 2010. В обозревателе решений убедитесь, что имя проекта и имя формы совпадают с тем, что было в вашем файле Me. Оператор MainForm.

Затем вам нужно будет открыть код формы и убедиться, что у вас есть следующий код:

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

При открытии конструктора форм отображается сообщение «Загрузка конструктора» (изображение прилагается) и полностью не отображается конструктор форм. Что нужно сделать, чтобы дизайнер форм отображался? Конструктор форм иногда отображается после нескольких перезапусков VS, а иногда ему повезло, что он отображается при первом запуске VS. Я не сталкивался с этим при использовании VS 2019 NET 5

Текст был успешно обновлен, но возникли следующие ошибки:

Прокомментировал Shyam-Gupta 11 января 2022 г. •

@Njoro007 Не могли бы вы предоставить следующую информацию:

Njoro007 прокомментировал 12 января 2022 г. •

Проблема очень случайна. Это происходит в любом проекте (старом или новом), NET 5 или NET 6. Иногда мне везет, когда конструктор форм Windows отображает форму. Иногда даже при многочисленных перезапусках VS не работает.

Да, все проекты успешно создаются, я также могу выполнять отладку

Я обнаружил ряд ошибок только в DesignerToolsServer.exe

kirsan31 прокомментировал 12 января 2022 г.

Я могу добавить к этому свои 50 центов.

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

Кроме того, при использовании Designer VS часто происходит сбой (выход из всех процессов).
В результате я привык всегда сохранять свою работу перед использованием дизайнера и в процессе его использования.

Комментарий Shyam-Gupta от 12 января 2022 г.

@Njoro007 Спасибо, что поделились информацией. Из журналов я могу подтвердить, что это происходит потому, что процесс DesignToolsServer завершается при запуске. Если бы вы могли поделиться журналами EventVwr для этого процесса, это помогло бы мне определить основную причину.

Также сообщите мне проект Target Framework и вывод следующей команды при выполнении в командной строке Visual Studio Developer: "c:\Program Files\dotnet\dotnet.exe" --list-runtimes .

Комментарий Shyam-Gupta от 12 января 2022 г.

@kirsan31 Всякий раз, когда проблема повторяется для вас, не могли бы вы поделиться журналами окна вывода WinForms и журналами EventVwr для devenv.exe и DesignToolsServer.exe . Спасибо.

Arcalise08 прокомментировал 13 января 2022 г.

У меня такая же ошибка. Я оставляю конструктор форм Windows в подробном режиме. У меня практически такая же ошибка, как и у ОП. Делает это случайным образом. Также отсутствуют журналы EventVwr, относящиеся к событию. К сожалению, недостаточно просто закрыть форму и снова открыть ее. После получения тайм-аута named_pipe вы должны перезапустить Visual Studio, чтобы повторить попытку.

Комментарий Shyam-Gupta от 13 января 2022 г.

@Arcalise08 Какую версию Visual Studio вы используете? Это работало для вас в более ранних версиях?

прокомментировал подписчик 14 января 2022 г.

У меня была такая же проблема сегодня.
Внимательно изучив ошибки и вещи, с которыми я столкнулся до того, как ошибка начала происходить. Я проверил, что он ищет файл из временной папки. В одном из моих проектов есть ссылка на проект с более высокой версией, что вызвало ошибку при загрузке логгера. Я проверил это, удалив содержимое папки Temp и создав новый проект. Это решило проблему. Я вернулся в проект и удалил ссылки на пакеты с более высокой версией. Я удалил данные из временной папки и снова запустил ее. Работал отлично.
До этого я пытался переустановить Windows, установить VS 2022, вернуться к обновлениям ПК, и ничего не помогло.

Arcalise08 прокомментировал 14 января 2022 г.

@Arcalise08 Какую версию Visual Studio вы используете? Работало ли это у вас в более ранних версиях?

Я подтвердил эту проблему в 17.0.4, 17.0.5 и 17.1.0

Прокомментировал Shyam-Gupta 14 января 2022 г.

@Arcalise08 Не могли бы вы проверить, установлены ли соответствующие версии среды выполнения вместе с Visual Studio. Эти параметры доступны в установщике Visual Studio -> Изменить -> вкладка Отдельные компоненты. Если они не установлены, попробуйте установить их и посмотрите, решится ли проблема.

Прокомментировал Shyam-Gupta 14 января 2022 г.

прокомментировал подписчик 14 января 2022 г. •

@Arcalise08 позвольте мне объяснить лучше. Ошибка та же.

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

Arcalise08 прокомментировал 14 января 2022 г.

прокомментировал подписчик 14 января 2022 г.

в VS2022 у меня также есть тайм-аут. я могу получить ошибку только в VS 2019.

Arcalise08 прокомментировал 14 января 2022 г.

@foller мы говорим об ошибке VS2022

kirsan31 прокомментировал 15 января 2022 г.

Мы обсуждаем эту тему с некоторыми возможными объяснениями.

thomasmiko прокомментировал 17 января 2022 г.

Если я активирую ведение журнала дизайнера winforms, я увижу следующее исключение в окне вывода:

Это исключение с недопустимыми символами в пути, но я не знаю, какой путь имеется в виду. Исходный файл находится в следующем месте (также пробовали другие места):

Дата присоединения к новому участнику: май 2020 г. Сообщений 5

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

это изображение базового кода


это базовый код
_
Основной частичный класс
Наследует System.Windows.Forms.Form

'Форма переопределяет dispose для очистки списка компонентов.
_
Защищенные переопределения Sub Dispose(ByVal dispose As Boolean)
Попробуйте
Если удаление компонентов AndAlso IsNot Nothing Then
components.Dispose()
End If
Наконец
MyBase.Dispose(disposing)
End Try
End Sub

Дружить с панелью событий1 как панель
Дружить с ярлыком событий1 как меткой
Дружить с панелью событий2 как панелью
Дружить с панелью событий событиями MenuButton как кнопкой
Дружить с кнопкой входа с событиями как кнопкой
Дружить с событиями RegButton As Button
Друг WithEvents PictureBox1 As PictureBox
Friend WithEvents LogOutButton As Button
Friend WithEvents Secondusercontrol_sign_in_1 As secondusercontrol_sign_in_
Friend WithEvents SidePanel As Panel
Friend WithEvents Label2 As Label
Друг WithEvents Label2 As Label
Друг сEvents Secondusercontrol_sign_in_2 Как secondusercontrol_sign_in_
Друг сEvents Thirdusercontrol_menu_1 Как третийusercontrol_menu_
Друг сEvents Secondusercontrol_sign_in_3 Как secondusercontrol_sign_in_
Друг сEvents Firstusercontrol_register_1 Как firstusercontrol_register_
Конец класса

.NUT Дата регистрации: май 2005 г. Местоположение: Сидней, Австралия Сообщений: 108 109

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

<р>1. Добавьте в свое решение новый проект WinForms.
2. В обозревателе решений перетащите форму из исходного проекта в новый проект, чтобы создать копию.
3. Внесите в новый проект дополнительные изменения, необходимые для его компиляции.
4. Проверьте, можно ли открыть форму в дизайнере в новом проекте и, если можно, удалите форму из исходного проекта и перетащите ее обратно в исходный проект из нового проекта.
5. Удалите новый проект.

Читайте также: