Изменение фокуса TextBoxes в UserControl с помощью клавиши Enter - PullRequest
0 голосов
/ 06 июня 2019

Я использую пользовательский UserControl, который содержит несколько TextBoxe элементов управления, см. Ниже:

enter image description here

Я бы хотел использовать клавишу Enter для перемещения между элементами управления TextBoxe в UserControl.

Однако, когда я помещаю UserControl в форму и нажимаю клавишу Enter после того, как первый TexTbox ('Shape') получает фокус, фокус помещается на следующий элемент управления формы после UserControl. Он пропускает «Dim1» через «Разное» TextBoxe управления. Я могу использовать клавишу Tab, и она будет проходить через каждый TextBoxe, как и ожидалось. Я попытался использовать различные события нажатия клавиш, и хотя они ловят определенные клавиши (то есть буквы и цифры), они, кажется, не ловят клавишу Enter.

Буду признателен за любую помощь / руководство о том, как этого добиться.

1 Ответ

1 голос
/ 06 июня 2019

Вы можете добавить ко всем текстовым полям в пользовательском элементе управления событие KeyDown, которое перехватывает Enter и отправляет фокус в следующем текстовом поле в порядке табуляции:

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    Control textbox = sender as TextBox;
    if (textbox != null) // Safety check
    {
        if (e.KeyCode == Keys.Enter)
        {
            // Check if next control is a text-box and send focus to it.
            Control nextControl = GetNextControl(textbox, true);
            if (nextControl is TextBox)
            {
                SelectNextControl(textbox, true, true, false, false);
            }
        }
    }
}

Чтобы избежать подписки на события, предлагаемой Пассантом Ганса , вы можете переопределить ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    Control control = ActiveControl as TextBox;
    if (control != null) // Safety check
    {
        if (keyData == Keys.Enter)
        {
            // Check if next control is a text-box and send focus to it.
            Control nextControl = GetNextControl(control, true);
            if (nextControl is TextBox)
            {
                SelectNextControl(control, true, true, false, false);
            }
        }
    }

    return base.ProcessCmdKey(ref msg, keyData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...