Как сделать поиск в пользовательском контроле универсальным в .net2.0 winforms

2

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

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

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

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

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

Все .net 2.0 Winform

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

Теги:
winforms
design
.net-2.0

1 ответ

2
Лучший ответ

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню