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