Как сделать поиск в пользовательском контроле универсальным в .net2.0 winforms - PullRequest
2 голосов
/ 17 февраля 2009

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

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

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

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

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

Это все .net 2.0 Winform

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

1 Ответ

2 голосов
/ 17 февраля 2009

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

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

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

...