Как обнаружить нажатие клавиши табуляции в C #? - PullRequest
4 голосов
/ 02 июня 2010

Я хочу определить, когда клавиша табуляции нажата в текстовом поле, и сфокусировать следующее текстовое поле на панели.

Я опробовал метод keyPressed и метод keyDown. Но когда я запускаю программу и отлаживаю, эти методы не вызываются при нажатии клавиши табуляции. Вот мой код.

private void textBoxName_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        textBoxUsername.Focus();
    }
}

private void textBoxName_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar==(char)Keys.Tab)
    {
        textBoxUsername.Focus();
    }
}

Пожалуйста, поправьте меня. Спасибо.

Ответы [ 7 ]

10 голосов
/ 02 июня 2010

Зачем вам это осложнение вообще? WinForms делает это для вас автоматически. Вам просто нужно установить правильный порядок табуляции.

6 голосов
/ 14 октября 2010

перейдите в свойства текстового поля и назначьте правильный порядок tabindex

3 голосов
/ 02 июня 2010

Вы должны использовать взамен tabOrder.

1 голос
/ 02 июня 2010

Вы можете попробовать переопределить метод ProcessCmdKey следующим образом

1 голос
/ 02 июня 2010

Вы хотите, чтобы событие "уйти". Я просто бросил это в стандартное приложение C # WinForms:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        /* 
              ... misc housekeeping ... 
        */

        private void OnLeave(object sender, EventArgs e)
        {
            lblMsg.Text = "left field 1";
        }

        private void OnLeave2(object sender, EventArgs e)
        {
            lblMsg.Text = "left field 2";
        }
    }
}

Это работает так, как вы ожидаете. Очевидно, что вы можете делать все что угодно в обработчике Leave(), включая принудительное фокусирование в другом месте, но будьте осторожны, чтобы не запутать пользователя ...

0 голосов
/ 02 июня 2015

Если вы имеете дело с текстовыми полями внутри Panel, то установка правильного индекса вкладки должна отлично работать. Но, если вы имеете дело с другим текстовым полем из другой панели, скажите:

панель1 имеет текстовое поле1

панель2 имеет текстовое поле2

панель 3 имеет текстовое поле3

Вот что вам нужно сделать:

  1. Установите TabStop = False property для всех текстовых полей. По умолчанию установлено значение True.

  2. Установите правильный TabIndex для каждой панели, например,

    panel1 TabIndex = 0; panel2 TabIndex = 1; panel3 TabIndex = 2;

  3. Тогда попробуйте этот код

    private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode.Equals(Keys.Tab)) this.textBox3.Focus(); }

0 голосов
/ 02 июня 2010

Если textBoxName имеет фокус при нажатии клавиши TAB, то срабатывает только событие «KeyDown». Вам просто нужно установить правильный порядок табуляции.

...