Конструктор элемента управления или формы не выполняется при редактировании этого класса в конструкторе (также не вызывается OnLoad). Я иногда использовал это, чтобы установить одно значение в конструкторе (например, сделать его дочерние элементы управления всеми видимыми в конструкторе), но переопределить некоторые из них на другое значение по умолчанию в конструкторе (например, скрыть определенные дочерние элементы управления, которые будут отображать только при определенных обстоятельствах, таких как индикатор в строке состояния).
Однако конструктор выполняет , если элемент управления помещен как дочерний элемент в другой элемент управления или форму в конструкторе. OnLoad также выполняется. Это может быть то, как ваш код регистрации был случайно запущен в конструкторе.
Для определения проектирования и выполнения, ответ на другой вопрос содержит скриншоты некоторых эмпирических тестов, показывающих значения, возвращаемые некоторыми общими подходами. Похоже, что дочерний элемент управления дочернего элемента управления (на два уровня ниже) формы или элемента управления, редактируемого в конструкторе, видит свой собственный DesignMode == false, поэтому обычная проверка свойств не сможет защитить код (например, в методе OnLoad ) для элементов управления, вложенных в элемент управления, добавленный в конструктор. Если вы проверяли DesignMode, как и следовало ожидать, это может быть вложенность, которая заставила его обойти эту проверку. Он также всегда видит DesignMode == false в конструкторе.
Кроме того, обратите внимание, что LicenseManager.UsageMode проверяет только видит DesignTime внутри конструктора; когда вызывается OnLoad, он находится внутри RunTime LicenseContext. Наиболее полное решение, по-видимому, заключается в проверке LicenseManager.UsageMode в конструкторе элемента управления или формы (или компонента) и сохранении параметра в переменной или свойстве-члене, которое можно проверить позже, чтобы избежать запуска кода, который никогда не должен запускаться в конструкторе. даже когда вложено. Есть также другой подход в другом ответе на этот другой вопрос, который объясняет вложение, но работает только вне конструктора.