Горизонтальный список пользовательских элементов управления (winforms)
Я уверен, что это не может быть так сложно, как я нахожу это до сих пор!
Я пытаюсь сделать горизонтальный список пользовательских элементов управления. Там будет большое их количество. Так что некоторая форма виртуального списка будет предпочтительнее.
Каждый пользовательский элемент управления будет содержать изображение и будет доступен для выбора.
В Android/Flex/iOS это тривиально с их адаптерами списков, средствами визуализации элементов списков и т. Д. Однако в формах Win это действительно очень сложно.
Я посмотрел на ObjectListView, устанавливающий режим просмотра в Tile. Однако не существует способа визуализации по горизонтали.
Я попытался просто заполнить макет потока с помощью моих пользовательских элементов управления. Но использование памяти идет через крышу, поскольку это загружает изображения.
2 ответа
Вы можете использовать контейнерный элемент управления FlowLayoutPanel и установить для его WrapContents значение false, а для FlowDirection - значение LeftToRight (по умолчанию). ... и, возможно, AutoScroll to true.
РЕДАКТИРОВАТЬ
Что касается выхода из памяти, подумайте об имитации виртуализации путем обработки события Scroll и создания / удаления элементов управления по мере необходимости.
Получите свой собственный контроль изображения из Control
и переопределить OnPaint
для того, чтобы нарисовать изображение самостоятельно. Добавьте свойство для пути или имени изображения, но не храните само изображение в элементе управления. Google для пользовательского контроля C#.
Используйте кеш для изображений. Хорошей структурой данных для этого является кольцевой буфер. Это помогает хранить только ограниченное количество изображений в памяти.