Чтобы создать удобный пользовательский интерфейс для приложения .Net 2.0 Winforms, над которым я работаю, мне нужен элемент управления, который, я уверен, выходит за рамки стандартного поведения любого стандартного элемента управления. Макет того, чего я пытаюсь достичь, выглядит следующим образом:
Макет http://www.claware.com/images/temp/mockup.png
По сути, эта часть приложения пытается разобрать слова в слоги из племенных языков (нет словаря, на который можно сослаться; возможны все символы Юникода.) Когда пользователь зашел так далеко, он уже определил гласные / согласные на его языке и некоторые другие конфигурации. Затем происходит итерационный процесс: (1) приложение угадывает, какие слоги существуют в языке на основе некоторых правил, (2) пользователь уточняет догадки, выбирает правильные разборы или анализирует слово вручную, (3) приложение «запоминает «Исходя из отзывов пользователей и делая более умные догадки, (4) повторяйте, пока данные не станут« достаточно хорошими », чтобы двигаться дальше.
Элемент управления должен представить каждое слово (серые заголовки), а затем угадать все разрывы слога (белые области с точками, разделяющими части слов). Существует также способ ввода синтаксического анализа вручную, который будет отображать область текста и кнопка сохранения (внизу макета). Когда пользователь наводит курсор на предположение, фон меняется и появляются кнопки «принять / отклонить». Нажав на Принять, или введя ручной анализ, удаляет все слово из списка. Нажатие на кнопку отклонения удаляет только этот элемент.
Я ни в коем случае не на 100% продан с форматированием, которое у меня есть выше, но я думаю, что вы можете получить общее представление о типах форматирования и функционального контроля, которые мне нужны. Элемент управления также будет прокручиваться вертикально - изначально могут быть тысячи слов.
Мой вопрос к вам, опытным разработчикам WinForms: с чего начать? Мне бы очень хотелось остаться в рамках ядра .Net и расширить существующий элемент управления, а не сторонний элемент управления. (С риском начать религиозную войну: да, я страдаю от NIH-синдрома, но это сознательное решение, основанное на множестве быстрых решений, но долгосрочных проблемах со сторонним контролем.) Где я могу получить больше всего "удар для моего доллара" и наименее изобретать велосипед? Посмотреть список? ListBox? ScrollableControl? Нужно ли мне возвращаться к контролю и рисовать все вручную? Я ценю любую помощь, которая может быть оказана!
[Редактировать] Спасибо всем за идеи. Похоже, что самое элегантное решение для моих целей - создать пользовательский элемент управления, состоящий из FlowLayoutPanel и VScrollBar. FlowLayoutPanel может содержать экземпляры пользовательских элементов управления, используемых для каждого слова. Но FlowLayoutPanel является виртуальным, т. Е. Содержит только те экземпляры, которые видны (и некоторые «просто вне прокрутки»). События VScrollBar определяют, что должно быть загружено. Немного кода для написания, но не так уж плохо и, кажется, работает хорошо.