Я экспериментирую с написанием собственных компонентов WinForms и написал пару простых компонентов валидатора для использования с подклассом ErrorProvider
, который автоматически перехватывает события валидации. Все эти компоненты могут быть добавлены в форму и подключены с использованием только дизайнера благодаря IExtenderProvider
.
Теперь, пытаясь подняться на один уровень выше, я пытаюсь заставить составной валидатор можно использовать с дизайнером. Я могу запустить его и работать с кодом, но это действительно просто. Я бы хотел, чтобы это работало только для дизайнера.
Моя трудность заключается в раскрытии свойства, которое представляет собой набор других валидаторов, находящихся в той же форме. Все валидаторы наследуются напрямую от Component и реализуют интерфейс IControlValidator
. Я готов изменить это, чтобы они унаследовали от базового класса ValidatorComponent
, если это поможет.
Я подумал о нескольких решениях, но либо они мне не нравятся, либо я не могу заставить их работать:
Сделайте валидаторы невидимыми элементами управления, а составной валидатор содержит их, аналогично тому, что делает Panel
;
Этот мне не нравится, потому что он больше о взломе, и необходимость жонглировать ими среди настоящих элементов управления просто кажется неправильным;
Используйте редактор коллекций, как вы используете для панелей инструментов;
Я поискал в Интернете и нашел пару статей об этом, но не смог заставить их работать. По крайней мере, без создания собственной формы редактора, что было бы слишком хлопотно для экспериментального проекта.
Признаюсь, я не тратил много времени на это, потому что понял, используя стандартный CollectionEditor
привел бы меня к использованию фиксированного набора типов валидаторов (не так ли?).
Я также подумал о создании простого класса ValidatorReference
с единственным свойством типа IControlValidator
и используйте его как тип элемента для простого редактора коллекций. Затем я бы добавил один из них и в его сетке свойств установил свойство для существующего компонента валидатора. Это кажется легким в использовании, но теряет свою привлекательность, потому что это такой очевидный взлом.
У кого-нибудь есть другие идеи? Что-то мне не хватает, а это что-то простое?