Почему происходит сбой формы при изменении пользовательского элемента управления? - PullRequest
2 голосов
/ 12 июня 2009

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

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

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

Кто-нибудь еще имел эту проблему? Это ошибка в VS?

Ответы [ 5 ]

2 голосов
/ 12 июня 2009

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

Вы можете добавить следующий атрибут в свойства для предотвращения сериализации:

Импортирует System.ComponentModel

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
0 голосов
/ 15 сентября 2009

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

0 голосов
/ 19 июля 2009

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

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

Даже если он потерян, вы можете исправить его, выбрав опцию «игнорировать и продолжить ... это может привести к нестабильной работе дизайнера», чтобы вы могли удалить элемент управления.

0 голосов
/ 12 июня 2009

Проблема не в самом элементе управления - после выхода из VS и загрузки проекта обратно (с новой аварийной сохраненной копией формы, которая была удалена), он работает нормально.

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

Может ли причина быть связана с несохраненными изменениями в форме и изменением, созданным путем изменения формы?

0 голосов
/ 12 июня 2009

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

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

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

If Me.DesignMode Then
    Return
End If

Свойство DesignMode возвращает значение True, когда элемент управления отображается в конструкторе, в противном случае - значение false. Это свойство не является надежным на 100%. Если у вас есть элемент управления в другом элементе управления, свойство DesignMode дочернего элемента управления будет False. Больно больно больно работать, когда у вас есть несколько слоев вложенных элементов управления.

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