перемещение между textbox как в Excel

Я создаю журнал для оценок. Мне нужно перемещаться между textbox, используя стрелки на клавиатуре. мой интерфейс будет выглядеть как таблица, но я не могу использовать TableLayotPanel и тому подобное, потому что интерфейс очень своеобразный (кастомный). Вот что у меня есть на данный момент

private void TextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (sender is TextBox currentTextBox)
        {
            switch (e.KeyCode)
            {
                case Keys.Down:
                    SelectNextControl(currentTextBox, forward: true, tabStopOnly: true, nested: true, wrap: true);
                    break;
                case Keys.Up:
                    SelectNextControl(currentTextBox, forward: false, tabStopOnly: true, nested: true, wrap: true);
                    break;
                case Keys.Right:
                    MoveToTextbox(currentTextBox, vertical: 1);
                    break;
                case Keys.Left:
                    MoveToTextbox(currentTextBox, vertical: -1);
                    break;
            }
        }
    }
    private void MoveToTextbox(TextBox current, int vertical)
    {
        Control nextControl = null;
        int minDistance = int.MaxValue;
        foreach (Control ctrl in Controls)
        {
            if (ctrl is TextBox tb && tb != current)
            {
                int distance = Math.Abs(tb.Top - (current.Top + vertical * current.Height));
                if (distance < minDistance && (vertical > 0 ? tb.Top > current.Top : tb.Top < current.Top))
                {
                    minDistance = distance;
                    nextControl = tb;
                }
            }
        }
        nextControl?.Focus();
    }

метод TextBox_KeyDown присутствует в каждом textbox. как сейчас выглядит интерфейс enter image description here

фото с чего я создаю интерфейс. у меня не получилось сделать через TableLayotPanel, поэтому я просто добавил textbox на Panel и расположил его так, как мне было нужно. enter image description here

enter image description here

Вот еще видео того как щас работает перемещение video. потом появится больше ячеек (textbox) для оценок, и нужно будет перемещаться между ними, хотелось бы, например, как в Exel. не знаю может как то через определение данных расположения textbox на панели через Control.


Ответы (0 шт):