web-dev-qa-db-fra.com

Détecter la touche de tabulation Appuyez dans la zone de texte

J'essaie de détecter le Tab appuyez dans une TextBoxname__. Je sais que la touche Tab ne déclenche pas les événements KeyDownname__, KeyUpou KeyPressname__. J'ai trouvé: Détecter la touche de tabulation dans Windows Forms de BlackWasp sur Internet. Ils suggèrent de remplacer ProcessCmdKey, ce que j'ai fait, mais cela ne se déclenche pas non plus. Existe-t-il un moyen fiable de détecter une pression sur la touche de tabulation?

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{

    bool baseResult = base.ProcessCmdKey(ref msg, keyData);

    if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
    {
        MessageBox.Show("Tab key pressed.");
        return true;
    }
    if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
    {
        MessageBox.Show("Shift-Tab key pressed.");
        return true;
    }

    return baseResult;
}

Selon la suggestion de Cody Gray, j'ai modifié le code comme suit:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
        {
            MessageBox.Show("Tab key pressed.");        }
        if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
        {
            MessageBox.Show("Shift-Tab key pressed.");        }

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

Le problème est qu'il ne capture pas la pression sur la touche de tabulation.

9
user2102327

Certaines touches, telles que la TABRETURNESC, et les touches fléchées, sont généralement ignorés par certaines commandes car elles ne sont pas considérées comme des pressions sur les touches.

Vous pouvez gérer PreviewKeyDown l'événement de votre contrôle pour gérer ces traits de clé et les définir comme clé d'entrée.

private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if(e.KeyData == Keys.Tab)
    {
        MessageBox.Show("Tab");
        e.IsInputKey = true;
    }
    if (e.KeyData == (Keys.Tab | Keys.Shift))
    {
        MessageBox.Show("Shift + Tab");
        e.IsInputKey = true;
    }
}
12
Reza Aghaei

vous pouvez utiliser ce code pour onglet sont presé ...

 private void input_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    { 
        //Check here tab press or not
        if (e.KeyCode == Keys.Tab)
        {
           //our code here
        }
        //Check for the Shift Key as well
        if (Control.ModifierKeys == Keys.Shift && e.KeyCode == Keys.Tab) {

        }
    }
0
Tejas Girase