- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
перемещение между 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. как сейчас выглядит интерфейс
фото с чего я создаю интерфейс. у меня не получилось сделать через TableLayotPanel, поэтому я просто добавил textbox на Panel и расположил его так, как мне было нужно.
Вот еще видео того как щас работает перемещение video. потом появится больше ячеек (textbox) для оценок, и нужно будет перемещаться между ними, хотелось бы, например, как в Exel. не знаю может как то через определение данных расположения textbox на панели через Control.