Как определить нажатие клавиши табуляции в С#?

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

Я пробовал метод 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();
    }
}

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


person Dinu    schedule 02.06.2010    source источник
comment
НЕЕЕЕТ!!! Не делай так! Взгляните на: stackoverflow.com/questions/2942617/   -  person Oliver    schedule 02.06.2010
comment
Вы видели ‹stackoverflow.com/a/35914976/10205407›? Кредиты: @Reza Aghaei   -  person BerDev    schedule 21.09.2018


Ответы (7)


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

person sravan    schedule 14.10.2010
comment
Этот ответ не отвечает на вопрос ОП. Это одна из тех сложных ситуаций, когда мы должны ответить на то, что они спросили или что лучше. - person Steve Byrne; 26.02.2016

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

person Fyodor Soikin    schedule 02.06.2010
comment
как поставить правильный порядок табуляции? Он автоматически размещается в неправильном порядке, поэтому я хотел сделать это вручную. - person Dinu; 02.06.2010
comment
Используйте свойство TabIndex в элементе управления. Вы можете установить это программно или использовать View -> Tab Order в дизайнере. - person Eltariel; 02.06.2010

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

person VoodooChild    schedule 02.06.2010

Вам нужно событие "оставить". Я просто бросил это в приложение WinForms C # по умолчанию:

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(), включая принудительное переключение фокуса в другое место, но будьте осторожны, чтобы не запутать пользователя...

person egrunin    schedule 02.06.2010

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

person Amsakanna    schedule 02.06.2010

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

person user374191    schedule 02.06.2010

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

панель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(); }

person Tobee    schedule 02.06.2015