Требуемая функциональность «расширенного» поля со списком - это метод быстрого поиска. Каждый элемент в выпадающем списке имеет метод ToString (), так что они могут отображаться в раскрывающемся списке. При нажатии на элемент в раскрывающемся списке наблюдатели в выпадающем списке уведомляются о выборе.
Кроме того, каждый раз, когда набранный текст в комбинированном ящике изменяется, генерируется список «Кандидатов», состоящий из всех тех элементов в раскрывающемся списке, которые содержат текст, набранный до сих пор. Нажатие клавиши ввода приводит вас к первому кандидату в этом списке, а повторное нажатие клавиши ввода циклически перемещает вас по списку.
Я реализовал эту функциональность, выведя из ComboBox - я подумал, что это имеет смысл, так как я все еще функционально оставлен с комбинированным списком, он просто добавил эту функцию "QuickFind". Однако логика создания списка кандидатов и его циклического перемещения, хотя и проста, не совсем тривиальна и требует некоторого тестирования.
Однако, как видно здесь не так-то просто проверить ComboBox, просто создав его и добавив дополнительные подпрограммы, которые я добавил - он должен существовать в форме для вести себя так же, как в приложении. Это кажется слишком большим усилием, чтобы протестировать простое дополнение к простому комбинированному окну!
Однако в коде для циклического прохождения кандидатов нет ничего конкретного для моего приложения - я создал общий элемент управления, который можно использовать в любом количестве контекстов, единственное требование заключается в том, чтобы объекты в выпадающем списке имели ToString () methiod - это то же ограничение, которое накладывается на объекты, входящие в обычные выпадающие списки, и гарантируется C # .NET.
Итак, с точки зрения тестируемости, куда бы вы поместили расширенную функциональность?