Подтвердить что ты не робот

Как сделать Enter в текстовом поле действовать как кнопка TAB

У меня есть несколько текстовых полей. Я бы хотел, чтобы кнопка Enter действовала как Tab. Так что, когда я буду в одном текстовом поле, нажатие Enter переместит меня на следующий. Не могли бы вы рассказать мне, как реализовать этот подход без добавления кода внутри класса текстового поля (без переопределения и т.д., Если это возможно)?

4b9b3361

Ответ 1

Вот код, который я обычно использую. Это должно быть в событии KeyDown.

if (e.KeyData == Keys.Enter)
{
    e.SuppressKeyPress = true;
    SelectNextControl(ActiveControl, true, true, true, true);
}

UPDATE

Другой способ отправляет ключ "TAB"! И переопределение метода делает его проще:)

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{            
    if (keyData == (Keys.Enter))
    {
        SendKeys.Send("{TAB}");
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

Ответ 2

Вы можете написать в keyDown любого элемента управления:

        if (e.KeyCode == Keys.Enter)
        {

            if (this.GetNextControl(ActiveControl, true) != null)
            {
                e.Handled = true;
                this.GetNextControl(ActiveControl, true).Focus();

            }
        }

GetNextControl не работает на Vista.

Чтобы заставить его работать с Vista, вам нужно будет использовать следующий код, чтобы заменить this.GetNextControl...:

System.Windows.Forms.SendKeys.Send("{TAB}");

Ответ 3

Вам не нужно создавать "обработчик событий ввода"

Все, что вам нужно сделать, это сделать "центральное" событие KeyDown:

Пример

private void General_KeyDown(object sender, KeyPressEventArgs e)
 {
 if (e.KeyCode == Keys.Enter)
        {

            if (this.GetNextControl(ActiveControl, true) != null)
            {
                e.Handled = true;
                this.GetNextControl(ActiveControl, true).Focus();
            }
        }
}

Затем все, что вам нужно сделать, это пойти в конструктор, чтобы выбрать все текстовые поля, которые вы хотите прокрутить, с помощью EnterKey (выберите их, удерживая Ctrl и нажав на текстовое поле с помощью мыши), затем перейдите в "События" (кнопка гром, как кнопка), выполните поиск Keydown события и типа внутри General_KeyDown. Теперь у всех выбранных текстовых ящиков будет одно и то же событие keydown:) Это делает все, что угодно, намного проще, вы можете представить себе форму со 100 текстовыми полями, и вы хотите циклически перебирать все с помощью ввода.... создание отдельного события для каждого texbox. ну, а не правильный способ сделать программу, она не опрятная. Надеюсь, это помогло!

Blockquote

Ответ 4

Это сработало для меня

if (e.Key == Key.Enter)
            ((TextBox)sender).MoveFocus(new TraversalRequest(new FocusNavigationDirection()));

Ответ 5

Если вы определяете Tab Order всех элементов управления и создаете Form.KeyPreview = True, вам нужно только это:

    Private Sub frmStart_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
        System.Windows.Forms.SendKeys.Send("{TAB}")
    End If
End Sub

Ответ 6

Важно отметить, что если вы получите раздражающий "звук" или предупредительный звук каждый раз, когда элемент управления ожидает связанного с ним кнопки управления, а e.Handled = true - это не всегда ответ, чтобы избавиться от шума/звука/динг.

Если элемент управления (то есть однострочный текстовый блок) ожидает связанную кнопку с 'ENTER' вашей записью, то вы также должны иметь дело с "отсутствующим" элементом управления.

e.Handled = e.SuppressKeyPress = true;

Это может быть полезно, если вы избавитесь от звука "ding".

Для того, что было в моих обстоятельствах, моим пользователям необходимо было использовать "ENTER KEY", когда мы переходили из приложения терминала/зеленого экрана в приложение Windows, и они больше использовались для "ENTER-IN" через поля а не табуляции.

Все эти методы работали, но все еще сохраняли раздражающий звук, пока я не добавил e.SuppressKeyPress.

Ответ 7

Для тех из вас, что код в vb...

Public Class NoReturnTextBox
    Inherits System.Windows.Forms.TextBox

    Const CARRIAGE_RETURN As Char = Chr(13)

    ' Trap for return key....
    Private Sub NoReturnTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

        If e.KeyChar = CARRIAGE_RETURN Then
            e.Handled = True
            System.Windows.Forms.SendKeys.Send(vbTab)
        End If

    End Sub

End Class

Ответ 8

Я использую этот код в одном из событий keydown keydown

if (e.KeyData == Keys.Enter)
{
     e.SuppressKeyPress = true;
     SelectNextControl(ActiveControl, true, true, true, true);
}

Невозможно обработать это событие keydown для всех текстовых полей в моей форме. Предложить что-нибудь. Благодаря

Ответ 9

Это решение, которое я использую для VB.NET

  • Задайте Keypreview = True в ваших свойствах формы.

  • Поместите этот код в событие keydown формы:

    Если (e.KeyData = Keys.Enter) Затем

    'для любого многострочного элемента управления, вы должны выйти, чтобы позволить многострочному нажатию "ввод текста" делает пропуски строк.

     If ActiveControl.Name = txtMyMutilineTextBox.Name Then Exit Sub 
    
     e.SuppressKeyPress = True
     SelectNextControl(ActiveControl, True, True, True, True)
    

    Конец Если

Наслаждайтесь!!!!

Xabier Aberasturi Larruzea

Ответ 10

Принимая дикое предположение:

// on enter event handler
parentForm.GetNextControl().Focus();

Ответ 11

Я бы совпадал с тем, что Фарабус и Арул отвечали так:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == ‘\r’)
{
e.Handled = true;
parentForm.GetNextControl().Focus()
}
}

Сообщите мне, если это поможет! JFV