Как сделать общий пользовательский контроль поиска в .net2.0 winforms

У меня есть пользовательский элемент управления поиском, который я хотел бы сделать универсальным.

Сам элемент управления будет содержать другой набор элементов управления в зависимости от его контекста. Например, это могут быть товарные запасы, люди, адрес в качестве контекста поиска.

Как я могу сделать его достаточно универсальным, чтобы на основе контекста поиска он точно знал, какие пользовательские элементы управления ему нужны в форме?

Затем любой программист может просто перетащить пользовательский элемент управления на свою форму, установить его контекст, и все готово.

Моя первая мысль — создать базовый элемент управления для всех отдельных пользовательских элементов управления, и диалоговое окно поиска принимает их в конструкторе, чтобы знать, какие из них показывать во время выполнения. Вы можете создавать унаследованные версии базовых элементов управления и передавать их. Или, может быть, просто установить контекст поиска (перечисление), и он покажет, как работают пользовательские элементы управления во время выполнения.

Это все .net 2.0 Winform

Отредактировано для удобства чтения. Раньше Q был слишком длинным и подробным.


person Crippeoblade    schedule 17.02.2009    source источник


Ответы (1)


В нашем проекте мы сделали это, добавив интерфейс ISearchable со свойствами CanSearch и Search. Они принимали аргумент направления, указывающий вперед или назад, а метод Search также принимал строку для выполнения поиска и перечисление, указывающее тип соответствия (начало фразы, конец фразы, включено во фразу и т. д.).

Затем мы реализовали этот интерфейс для всех элементов управления в иерархии. Затем каждый элемент управления делегируется дочерним элементам управления по своему усмотрению. Наше приложение-контейнер будет содержать текстовое поле и кнопки «следующий/предыдущий». Контейнер будет запрашивать первое представление в иерархии для интерфейса, который затем будет цепочкой вниз к целевому элементу управления, как это будет сочтено подходящим для каждого элемента управления в иерархии.

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

person Jeff Yates    schedule 17.02.2009