Почему свойства IExtenderProvider теряются в конструкторе в приложении окна C#?

Я создал IExtenderProvider (Extender) для Controls.using Extender, я перебираю коллекцию элементов управления и проверяю ее. Это отлично работает, но иногда при изменении некоторых конструкций или при обновлении дизайнера (при удалении некоторых событий из кода) свойства, предоставленные Extender (в моем случае, Validation Order и Group) теряются от дизайнера, а сам элемент управления не добавляется в коллекцию Extender. Таким образом, проверка, выполненная приложением, свернулась (и, конечно же, самим приложением) У меня тоже есть методы AlwaysSerialize и Reset в IExtenderProvider. Но мне ничего не помогло. Пожалуйста, объясните мне, как сделать все элементы управления видимыми для расширителя в любое время.

Спасибо мати

3 ответа

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

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

Следующий ответ определенно опаздывает на ФП, но может помочь другим.

У меня была та же самая проблема: свойства были или потеряны или не показывались вообще. В моем случае проблема заключалась в том, что тип, указанный в методах ProvideProperty, CanExtend и SetXXX и GetXX, был разным. Например, ProvideProperty и CanExtend указали "Control" в качестве типа, но в методах SetXXX и GetXXX в качестве первого параметра был указан "объект".

Итак, как только я убедился, что для каждого типа, указанного в ProvideProperty, у меня были соответствующие GetXXX и SetXXX, все работало как положено.

Может быть, это помогает.

Примечание: после исправления кода мне пришлось перезапустить Visual Studio.

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

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

Другие вопросы по тегам