Я создал новый фрейм, который я хотел зарегистрировать в качестве компонента. Я уже знал о RegisterSprigType из этого вопроса, так что это избавило меня от хлопот.
RegisterSprigType должным образом не позволяет дизайнеру выбирать, случайно перемещать или удалять элементы управления внутри вашего фрейма, но только напрямую. Элементы управления внутри по-прежнему принимают элементы управления, которые нужно удалить.
В моей ситуации у меня есть панели внутри рамки. Я могу нажать кнопку на панели. Если я удалю кнопку, то родительский элемент будет выбран (который будет панелью), а затем я смогу удалить панель.
Я попытался удалить csAcceptsControls из фрейма ControlStyle. Это предотвратило падение элементов управления непосредственно на фрейме, но панель внутри все еще принимала элементы управления.
Итак, я закончил удаление csAcceptsControls из всех элементов управления, содержащихся в моем фрейме, в процедуре "Загруженный".
Если мой кадр динамически создавал элементы управления в ответ на изменение свойств, я полагаю, мне также нужно будет переопределить процедуру уведомления, чтобы удалить csAcceptsControls из любых добавленных элементов управления.
Итак, мой вопрос: есть ли лучший способ добиться того же результата (запретите разработчику добавлять элементы управления внутри кадра, зарегистрированного как компонент). "Регистр" говорит разработчику игнорировать класс рамки и его дочерние элементы в качестве контейнеров, возможно?
Если этот метод уже самый оптимальный, я что-то пропустил?
Есть ли какие-либо "gotchas", о которых я должен знать при таком подходе? (Любые побочные эффекты - как дизайн, так и время выполнения).