Один простой способ сделать это:
- Создание прокручиваемой формы.
- Добавление сетки дочерних элементов управления 6x6.
- В событии GotFocus (или аналогичном) для всех элементов управления установите смещение прокрутки родительской формы в соответствующую позицию для центрирования дочернего элемента.
Это довольно простая вещь для реализации, с небольшим количеством математики, чтобы понять, как центрировать x, y позицию элемента управления, установив смещения прокрутки (это может быть сложно / запутанно, но пока Вы понимаете, системы координат, используемые для прокрутки, не так уж плохо)
Или другой подход, позволяющий избежать прокрутки через API Windows и использования пользовательских элементов управления:
- Создать форму
- Переопределите OnPaint, чтобы нарисовать вашу сетку из 6x6 «элементов управления» в виде простых графических фигур или растровых изображений с центром в выбранном «элементе управления».
- Обрабатывайте события клавиатуры (KeyDown / Up) и мыши (MouseDown / Up), чтобы заставить 36 областей графики реагировать на пользовательские вводы так, как вы хотите. Вам нужно будет отследить выбранный элемент и заставить окно перерисовать его графику, чтобы показать новое состояние. Включите двойную буферизацию, чтобы она перестала мигать.
Первый подход дает вам много возможностей для работы на основе окон (например, вкладки между элементами управления, запоминание того, где находится фокус ввода и направление событий в отдельные классы для каждого «элемента управления»). Второй подход убирает всю эту «помощь», но дает вам полный контроль над всем, что часто может помочь избежать непреднамеренного поведения (например, он не будет перемещать фокус ввода, когда пользователь нажимает Tab, если вы специально не пишете код, чтобы заставить его делать). что).